Todas las versiones del controlador desde la 1.3.0 utilizan conexiones persistentes para minimizar el número de conexiones realizadas a cada servidor de bases de datos. Estas conexiones son guardadas por el proceso obrero de PHP, pudiéndo ser reutilizadas entre varias peticiones.
Antes de conectar a servidor de bases de datos, el controlador creará un hash para la conexión basándose en su host, puerto, nombre del conjunto de réplica (si lo hay), cualquier credencial de autenticación (p. ej., nombre de usuario, contraseña, base de datos), y el ID del proceso. Si una conexión ya existe para dicho hash será utilizada en lugar de crear una nueva conexión asociada este hash. Se puede usar MongoClient::getConnections() para obtener información sobre cada conexión persistente. Considérese el siguiente programa:
<?php
$m1 = new MongoClient('mongodb://localhost');
$m2 = new MongoClient('mongodb://localhost');
$m3 = new MongoClient('mongodb://user:pw@localhost');
$m4 = new MongoClient('mongodb://127.0.0.1');
$m5 = new MongoClient('mongodb://rs1.local:30017,rs2.local:30018/?replicaSet=rs');
$m6 = new MongoClient('mongodb://sharding.local:40017');
foreach (MongoClient::getConnections() as $conn) {
echo $conn['hash'], "\n";
}
?>
El resultado del ejemplo sería algo similar a:
localhost:27017;-;X;15487 localhost:27017;-;admin/user/c56c…8bbc;15487 127.0.0.1:27017;-;X;15487 rs1.local:30017;rs;X;15487 rs2.local:30018;rs;X;15487 sharding.local:40017;-;X;15487
En este ejemplo $m1 y $m2 tienen el mismo hash y comparten una conexión persistente. Las conexiones para los demás instancias de MongoClient poseen valores únicos de hash y utilizan sus propios sockets. Observe que "localhost" y "127.0.0.1" no comparten el mismo hash; la resolución de DNS no se toma en cuenta.