it-swarm.com.ru

Mongodb PHP получить идентификатор нового документа?

Создание документа:

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

Я пытаюсь получить идентификатор нового документа. Как? Благодарю.

33
Mark

В соответствии с документами массив, который вы передаете insert, будет изменен полем _id:

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

Вы также можете получить _id перед вставкой. Просто добавьте поле _id в документ с новым MongoId т.е.

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

Также есть хорошие преимущества этого:

  1. Вам не нужен флаг fsync, как в комментариях ZagNut в Предыдущий ответ. Так что вам не нужно ждать ответа от БД. 
  2. Вам не нужно ничего вставлять в БД, чтобы получить идентификатор. Таким образом, вы можете Подготовить некоторые связанные объекты, а затем вставить или не вставить их -, Что-то вроде транзакций, которые Монго не поддерживает (пока?).
  3. Вы на самом деле можете генерировать идентификатор в своем приложении, а не в БД, так что вы можете .__ делать все, что вы хотите, до или после вставки.
34
user133408

Это работает для меня:

$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