35

创建文档:

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

我正在尝试获取新文档的 ID。如何?谢谢。

4

4 回答 4

62

根据文档,您传递给的数组insert将使用一个_id字段进行修改:

$db->collection->insert($content);
$newDocID = $content['_id'];
于 2010-12-24T10:38:00.853 回答
34

您还可以在插入之前获取 _id。只需使用新的 MongoId 将 _id 字段添加到文档中即可。

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

这也有很好的好处:

  1. 您不需要像 ZagNut 在之前的答案中发表的评论那样的 fsync 标志。所以你不需要等待数据库的回复。
  2. 您不需要实际向 DB 插入任何内容来获取 id。所以你可以准备一些相关的对象,然后插入或不插入它们——有点像 mongo 不支持的事务(还没有?)。
  3. 您实际上可以在您的应用程序中生成 id,而不是在 db 中,因此您可以在插入之前或之后做任何您想做的事情。
于 2012-07-13T09:18:44.757 回答
22

这对我有用:

$insertResult = $collection->insertOne($object);
$id = $insertResult->getInsertedId();
于 2016-06-15T11:32:47.783 回答
1
 $newDocument = $db->collection->findAndModify ( $row, $row, null, array('new'=>true,'upsert' => true));
 $strId = $newDocument['_id']->{'$id'};

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

于 2014-09-20T22:56:55.013 回答