为什么我无法在mongodb中找到_id的记录

时间:2011-07-29 00:33:08

标签: php mongodb find auto-increment

我试图通过它的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返回任何内容。

2 个答案:

答案 0 :(得分:26)

尝试db.Employee.find({_id:ObjectId("4e209564203d83940f000006")}

答案 1 :(得分:4)

你可以将你的id包装在ObjectID包装器周围。这告诉mongo db你正在寻找_id列的特定列。

var ObjectID=require('mongodb').ObjectID;

然后做

collection.findOne({_id: ObjectID(id)},function(err,user){  //blah blah}