【问题标题】: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找到吗?

标签: php mongodb find auto-increment


【解决方案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}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2017-02-14
    • 1970-01-01
    相关资源
    最近更新 更多