(PECL mongo >=0.9.0)
Mongo::__construct — Crée un nouvel objet de connection à une base de données Mongo
Si aucun paramètre n'est passé, la connection se fera sur "localhost:27017" (ou ce qui a été spécifié dans php.ini pour mongo.default_host et mongo.default_port).
server doit être de la forme:
mongodb://[username:password@]host1[:port1][,host2[:port2:],...]/db
La chaine de connexion débute toujours par mongodb://.
Si username et password sont précisés, le constructeur tentera d'authentifier la connection à la base. Username et password sont optionnels et doivent être suivis d'une @, si renseignés.
Au moins un hôte doit être précisé (port optionnel, par défaut 27017) et plusieurs hôtes vers lesquels se connecter peuvent être passés. Les noms d'hôtes sont séparés par des virgules et le constructeur exécutera sans erreur si au moins un des hôtes peut être connecté. Si il ne peut se connecter à aucun hôte, il enverra une MongoConnectionException.
Enfin, si vous avez précisé un username et un password, vous devez préciser une base de données envers laquelle s'authentifier. Si db n'est pas renseigné, "admin" sera utilisé.
Si vous ne voulez pas vous connecter immédiatement (vous passez l'option array("connect" => false)), vous devrez appeler Mongo::connect() avant toute opération vers la base.
<?php
$mongo = new Mongo("mongodb://localhost", array("connect" => false));
// Émet une exception MongoException, vu que $mongo n'a pas été totalement initialisé
$mongo->selectDB("foo")->command(array("distinct" => "bar", "key" => "age"));
// ok
$mongo->connect();
$mongo->selectDB("foo")->command(array("distinct" => "bar", "key" => "age"));
?>
Le nom du serveur.
Un tableau d'options pour la connection. Les options disponibles sont:
"connect"
Si le constructeur doit se connecter avant de retourner l'objet. Par défaut TRUE.
"persist"
Si la connection doit être persistante. La chaine représentant la valeur est utilisée comme identifiant de connection, ainsi deux instances de Mongo qui sont initialisées avec array("persist" => "foobar") vont partager la même connection à la base, alors que une instance initialisée avec array("persist" => "barbaz") utilisera une connection différente.
"timeout"
Période avant timeout (tentative de connection à la base). En millisecondes.
"replicaSet"
Si les hôtes listés sont compris dans un pool réplicat. Si c'est le cas, le maitre sera déterminé en utilisant la commande ismaster sur les serveurs, ainsi le pilote peut se connecter à un serveur qui n'était même pas listé. Voyez l'exemple après pour plus de détails.
Retourne un nouvel objet de connection à la base de données Mongo.
Emet une exception MongoConnectionException si la connection échoue avec les identifiants pour la base de données considérée ou si les identifiants sont invalides. Voyez la documentation de MongoConnectionException pour en savoir plus sur les exceptions courantes et leurs causes.
Version | Description |
---|---|
1.0.2 |
Le constructeur a changé pour accepter une tableau. Avant 1.0.2, le constructeur
acceptait les paramètres suivants:
|
1.0.9 | Ajout de l'option replicaSet. |
Exemple #1 Exemple avec Mongo::__construct() et un pool de réplicats
Cet exemple montre comment se connecter avec le driver à un pool de réplicats. Il suppose un jeu de trois serveurs: sf1.example.com, sf2.example.com et ny1.example.com. Le maitre peut être l'un de ces serveurs.
<?php
// Passer une liste séparée par une virgule de noms de serveurs au constructeur
$m1 = new Mongo("mongodb://sf2.example.com,ny1.example.com", array("replicaSet" => true));
// Vous ne passez qu'un seul serveur, le pilote récupèrera la liste complète et trouvera
// le maitre depuis ce serveur
$m2 = new Mongo("mongodb://ny1.example.com", array("replicaSet" => true));
?>
Si le maitre courant échoue, le pilote calculera quel serveur secondaire deviendra le nouveau maitre et utilisera sa connection. Le failover ne fonctionnera pas correctement si replicaSet n'est pas spécifié.
Au moins un serveur dans la liste doit fonctionner pour que le pilote se connecte au pool de replica.
Si vous incluez des serveurs depuis deux pools de réplicats distincts, le comportement est alors indéfini.
Voyez la » documentation du coeur sur la réplication.
Exemple #2 Connection via socket UNIX
Dans les versions 1.0.9+, vous pouvez utiliser une socket du domaine UNIX pour vous connecter à une instance de MongoDB locale. Ceci devrait être plus rapide qu'une connection réseau.
Dans la version 1.5.0, Le serveur MongoDB ouvre automatiquement une socket à /tmp/mongodb-<port>.sock. Vous pouvez vous y connecter en précisant le chemin dans la chaine de connection:
<?php
// Serveur MongoDB local sur le port 20000
$m = new Mongo("mongodb:///tmp/mongodb-20000.sock");
?>
Vous pouvez combiner cela avec d'autres connections:
<?php
// Essaye la connection socket UNIX, utilise localhost sinon
$m = new MongoDB("mongodb:///tmp/mongodb-27017.sock,localhost:27017");
?>
Exemple #3 Exemple avec Mongo::__construct() et une connection persistante
Une connection persistante est utilisée lorsque vous devez faire plus d'une requête. Elle permet de réduire significativement le temps dû aux reconnections.
Une connection persistante est identifiée par la chaîne du serveur et une chaine représentant un identifiant.
<?php
// Crée une connection persistante
$m1 = new Mongo("mongodb://localhost", array("persist" => ""));
// Utilise la même connection que $m1
$m2 = new Mongo("mongodb://localhost", array("persist" => ""));
// Crée une nouvelle connection
$m3 = new Mongo("mongodb://127.0.0.1", array("persist" => ""));
// Crée une nouvelle connection
$m4 = new Mongo("mongodb://127.0.0.1:27017", array("persist" => ""));
// Crée une nouvelle connection
$m5 = new Mongo("mongodb://localhost", array("persist" => "foo"));
// Utilise la connection $m5
$m6 = new Mongo("mongodb://localhost", array("persist" => "foo"));
?>
Exemple #4 Exemple d'authentification Mongo::__construct()
Un utilisateur doit exister dans la base de données admin avant de lancer l'authentification. Vous pouvez créer un utilisateur avec la commande shell Mongo suivante:
> use admin switched to db admin > db.addUser("testUser", "testPass"); { "_id" : ObjectId("4b21272fd9ab21611d19095c"), "user" : "testUser", "pwd" : "03b9b27e0abf1865e2f6fcbd9845dd59" } >
Après avoir crée un utilisateur, dans notre cas de nom "testUser" et password "testPass", vous pouvez créer une connection authentifiée:
<?php
$m = new Mongo("mongodb://testUser:testPass@localhost");
?>