如何使用mongodb _id查找记录

时间:2013-03-12 06:02:21

标签: php mongodb

我正在用mongodb和php做项目。所以我试图找到使用它的记录_id。在这里我像这样发布json值

{"_id": {"$id": "513ea9d4a00b2ade09000001"}}

然后我得到这个值并解码它并用它来找到这样的方式

$obj = json_decode( $json, true);
$result = $collection->find($obj);

但是上面的代码会给出错误,因为在json中它们是像$id这样的键。所以我如何解决上述问题请帮助我。

3 个答案:

答案 0 :(得分:4)

请遵循以下示例:

// This is only a string, this is NOT a MongoId
$mongoid = '4cb4ab6d7addf98506010000';

// You will not find anything by searching by string alone
$nothing = $collection->find(array('_id' => $mongoid));
echo $nothing->count(); // This should echo 0

// THIS is how you find something by MongoId
$realmongoid = new MongoId($mongoid);

// Pass the actual instance of the MongoId object to the query
$something = $collection->find(array('_id' => $realmongoid));
echo $something->count(); // This should echo 1

您可以找到更多信息here

答案 1 :(得分:2)

从JSON字符串开始,它与当前显示的所有示例略有不同。

因为你现在有一个assoc数组的对象,它看起来像:

array(
    '_id' => array(
        '$id' => "513ea9d4a00b2ade09000001"
    )
)

您必须提取$id属性并将其转换为MongoId,如下所示:

$db->collection->find(new MongoId($obj['$id']));

那会找到你的记录。

答案 2 :(得分:1)

要使用'_id'查找文档,您必须将其类型化为MongoId Object。这可以通过在查询查询中传递array('_id' => new MongoId($valOf_id) )来完成。

我没有写出详细的答案,因为我确信这足以让你说得对:-)