web-dev-qa-db-fra.com

Mongodb php obtenir l'identifiant du nouveau document?

Création d'un document:

$db->collection->insert($content);
// $newDocID = ???

J'essaie d'obtenir l'identifiant du nouveau document. Comment? Merci.

33
Mark

Selon les documents le tableau que vous passez à insert sera modifié avec un champ _id:

$db->collection->insert($content);
$newDocID = $content['_id'];
61
Theo

Vous pouvez également obtenir _id before insert. Il suffit d’ajouter un champ _id au document avec le nouvel indicateur MongoId.

$content['_id'] = new MongoId();
$db->collection->insert($content);

Il y a aussi de beaux avantages à cela:

  1. Vous n'avez pas besoin du drapeau fsync comme posté dans le commentaire de ZagNut dans Réponse précédente. Vous n'avez donc pas besoin d'attendre la réponse de DB. 
  2. Vous n'avez pas besoin d'insérer quoi que ce soit dans la base de données pour obtenir un identifiant. Vous pouvez donc préparer des objets liés, puis insérer ou non eux - Un peu comme des transactions que mongo ne prend pas (encore?) En charge.
  3. Vous avez en fait pouvez générer un identifiant dans votre application, pas dans la base de données, afin de pouvoirdo ce que vous voulez avant ou après l’insertion.
34
user133408

Cela fonctionne pour moi:

$insertResult = $collection->insertOne($object);
$id = $insertResult->getInsertedId();
9
the_root
 $newDocument = $db->collection->findAndModify ( $row, $row, null, array('new'=>true,'upsert' => true));
 $strId = $newDocument['_id']->{'$id'};

http://php.net/manual/en/mongocollection.findandmodify.php

0
BbopLifa