Manual
PHP Manual

Conexión

La Conexión a MongoDB es fácil con new Mongo, pero hay muchas más opciones y configuraciones adicionales. La página Mongo::__construct() cubre todas las opciones de la API, pero está página ofrece algunos caso de usos prácticos.

Acceso a la conexión

Si MongoDB se inicia con la opción --auth , las conexiones deben ser autenticadas antes de ser usadas. Puede hacer esto a nivel de cada base de datos con MongoDB::authenticate():

<?php

$m 
= new Mongo();
$db $m->admin;

$db->authenticate($username$password);

?>

Hay una gran desventaja en este método: si la conexión a la base de datos se ha caído y, se conecta automáticamente, La conexión ya no será autentificada.

Si utiliza el formato de cadena de conexión descrito en Mongo::__construct(), la base de datos se autentificará cuando la conexión se realice y debe autentificar si la conexión es extablecida nuevamente.

Esto es equivalente al código anterior, excepto que la reconexiones a la base de datos es automáticamente autentificadas:

<?php

$m 
= new Mongo("mongodb://${username}:${password}@localhost");

?>

Por omisión, el controlador autentifica al usuario en la base de datos. To authenticate with a different database, specify the database name after Para autentifica con diferentes base de datos, especifique el nombre de la base de datos después del host. Este ejemplo muestra el log del usuario dentro de la base de datos "blog":

<?php

$m 
= new Mongo("mongodb://${username}:${password}@localhost/blog");

?>

Replica Pairs

Para conectarse a un replica pair, especifique ambos lados de la pareja (pair).

<?php

$m 
= new Mongo("mongodb://localhost:27017,localhost:27018");

?>

El orden es irrelevante, el controlador PHP consulta los servidores de base de datos para averiguar cual es el master. Mientras se identifica los servidores disponibles y el master, la conexión será éxitosa. Si ninguno esta operativo y no es el master, se lanzá una expeción MongoConnectionException.

Si el master no se encuentra disponible, el slave no se convertirá en master por algunos segundos. Durante ese tiempo, el controlador no puede realizar ninguna operación en la base de datos porque la base de datos master se ha ido y otra base de datos es un slave Por lo tanto, si intenta hacer cualquier tipo de consulta (incluyendo operaciones "seguras") que generen excepciones.

El slave evalua y comprende que el master se ha ido y se convertirá asimismo como master. En este punto, el controlador establecerá esta como la base de datos primaria y continuará las operacciones normalmente.

Para obtener más información sobre replica pairs, consulte la » documentación del núcleo.

Connexiones persistentes

Crear una conexión a la base de datos es muy lento. Para minimizar el número de conexiones que se necesite, utilice las conexiones persistentes. Una conexión persistente es guardada por PHP, para que pueda usarse la misma conexión para múltiples peticiones.

Por ejemplo, este simple programa para conectarse 1000 veces a la base de datos:

<?php

for ($i=0$i<1000$i++) {
  
$m = new Mongo();
}

?>

Esto tarda apróximadamente 18 segundos en ejecutarse. Si cambiamos esto para que utilice una conexión persistente:

<?php

for ($i=0$i<1000$i++) {
  
$m = new Mongo("localhost:27017", array("persist" => "x"));
}

?>

...se tarda menos de 0.02 segundos en ejecutarse, ya que sólo se hace una conexión a la base de datos.

La conexión persistente necesita un string para identificarlo (que puede ser "x" como en el ejemplo anterior) para identificarlo únicamente. Para una conexión persistente se utiliza, el hostname, puerto, un string con el dato persistente, y un usuario y contraseña (si se le da) debe coincidir y existir en una conexión persistente existente. De lo contrario, una nueva conexión se crea con la información de identificación.

Soporte Domain Socket

Si se está ejecutando MongoDB en local con la versión 1.0.9 o superior del driver, se puede conectar a la base de datos vía fichero. MongoDB automáticamente al iniciarse abre un fichero socket: /tmp/mongodb-<port>.sock.

Para conectarse al fichero socket, especifique la ruta de la conexión MongoDB:

<?php

$m 
= new Mongo("mongodb:///tmp/mongo-27017.sock");

?>

Si se quiere utilizar autenticación en la conexión (tal y como se ha descrito más arriba) usando un fichero socket, se debe especificar el puerto 0 para que el analizador de la cadena de conexión sepa donde acaba la cadena de conexión.

<?php

$m 
= new Mongo("mongodb://username:password@/tmp/mongo-27017.sock:0/foo");

?>

Manual
PHP Manual