为啥我无法在 _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 中找到记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MongoDB 中找到“$oid”而不是 _id?

Mongodb:获取***文档

MongoDB/Mongoose:在填充字段中排序

Spring数据MongoDB无法在组聚合中映射_id

无法使用 mongoose 在 mongodb 中增加字段

为啥使用 MongoDB 的 $push 将新对象添加到数组时添加了带有 ObjectID 的 _id?