使用php upsert后得到mongodb _id对象

Tob*_*oby 11 php upsert mongodb

是否可以在查询后获取新的/更新的_id?示例代码:

$key = array( 'something' => 'unique' );
$data = array( '$inc' => array( 'someint' => 1 ) );
$mongodb->db->collection->update( $key, $data, array( 'upsert' => true ) );
Run Code Online (Sandbox Code Playgroud)

$ key没有持有新的/旧的_id对象,我认为$ data也不会因为它只是一个指令.

Cam*_*ron 16

是的 - 可以使用单个查询.

MongoDB包含一个findAndModify命令,可以自动修改文档并将其返回(默认情况下,它实际上会在文档被修改之前返回).

PHP驱动程序在集合类上没有包含一个方便的方法(但是 - 看看这个bug),但它仍然可以使用(注意我的PHP很糟糕,所以我很可能会出现语法错误在以下代码段中:

$key = array( 'something' => 'unique' );
$data = array( '$inc' => array( 'someint' => 1 ) );
$result = $mongodb->db->command( array(
    'findAndModify' => 'collection',
    'query' => $key,
    'update' => $data,
    'new' => true,        # To get back the document after the upsert
    'upsert' => true,
    'fields' => array( '_id' => 1 )   # Only return _id field
) );
$id = $result['value']['_id'];
Run Code Online (Sandbox Code Playgroud)


Jes*_*sse 15

为了防止有人像我一样偶然发现这个问题,Mongo实际上会在你调用MongoCollection-> save()时修改输入数组; - 将id附加到最后.所以,如果你打电话:

$test = array('test'=>'testing');
mongocollection->save($test);
echo $test['_id'];
Run Code Online (Sandbox Code Playgroud)

您将拥有该对象的mongo id.

  • 我知道这也适用于`insert()`函数. (3认同)