我正在用mongodb和php做项目。所以我试图找到使用它的记录_id。在这里我像这样发布json值
{"_id": {"$id": "513ea9d4a00b2ade09000001"}}
然后我得到这个值并解码它并用它来找到这样的方式
$obj = json_decode( $json, true);
$result = $collection->find($obj);
但是上面的代码会给出错误,因为在json中它们是像$id
这样的键。所以我如何解决上述问题请帮助我。
答案 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) )
来完成。
我没有写出详细的答案,因为我确信这足以让你说得对:-)