为啥我无法在 _id 在 mongodb 中找到记录
Posted
技术标签:
【中文标题】为啥我无法在 _id 在 mongodb 中找到记录【英文标题】:Why am I unable to find a record by _id in mongodb为什么我无法在 _id 在 mongodb 中找到记录 【发布时间】:2011-10-15 14:14:47 【问题描述】:我试图通过它的 MongoID "_id" 字段在 mongoDB 中查找记录。我找到了有关如何执行此操作的示例,但无法使其正常工作。示例:
$recID = "010101010101011"; //would be a valid mongodb _id
$recID = new MongoId((string)$recID); // I have tried it without the (string) cast too
$cursor = $this->Collection->findOne(array('_id' => $recID));
print_r($cursor);
它输出:
MongoCursor (
)
里面什么都没有。
我已通过将上面的“_id”更改为不同的字段(例如“firstName”)并传入名字来验证其他一切是否正常,然后我会取回有效数据。
为什么这不起作用?
我什至尝试使用 $recID 作为字符串进行搜索,没有区别。
这是 mongo shell 发生的事情(虽然我不确定我是否正确查询):
>
> db.Employee.find(login:"myperson")
"_explicitType" : "project.Employee", "_id" : ObjectId("4e209564203d83940f0000
06"), "active" : true, "addedDate" : "07/15/2011 15:29:21", "domain" : "xxx",
"id" : ObjectId("4e209564203d83940f000006"), "lastLogin" : "07/20/2011 19:13:36
", "login" : "myperson", "name" : "My Person", "pw" : "", "ulevel" : 9999
> db.Employee.find(id:"4e209564203d83940f000006")
> db.Employee.find(_id:"4e209564203d83940f000006")
>
注意 id 或 _id 没有返回任何内容。
【问题讨论】:
你能用mongodb交互式shell找到吗? 【参考方案1】:试试db.Employee.find(_id:ObjectId("4e209564203d83940f000006")
【讨论】:
好的,这可以在 shell 中工作,但不能在 php 中使用我上面的代码。 所以我再次查看了我的 php 代码,它现在可以工作了。我不知道为什么。不过,学习 mongodb shell 还是很好的。【参考方案2】:您可以将您的 id 包装在 ObjectID 包装器上。这告诉 mongo db 您正在寻找 _id 列的特定列。
var ObjectID=require('mongodb').ObjectID;
然后做
collection.findOne(_id: ObjectID(id),function(err,user) //blah blah
【讨论】:
以上是关于为啥我无法在 _id 在 mongodb 中找到记录的主要内容,如果未能解决你的问题,请参考以下文章