2011-07-29 110 views
10

我想通過它的MongoID「_id」字段在mongoDB中查找記錄。我已經找到了關於如何去做的例子,但是無法實現。例如:爲什麼我無法通過_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作爲字符串搜索,沒有區別。

這裏是蒙戈外殼會發生什麼(雖然我不知道如果我正確地查詢):id的或_id

> 
> 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"}) 
> 

通知沒有退回。

+0

你能找到使用MongoDB的交互shell呢? – KaKa

回答

26

嘗試db.Employee.find({_id:ObjectId("4e209564203d83940f000006")}

+2

好吧,這是從shell工作,但它不是從PHP使用我的代碼上面工作。 –

+1

所以我再次檢查我的PHP代碼,現在它正在工作。我不知道爲什麼。儘管如此,對於mongodb shell的瞭解還是很好的。 –

4

可以環繞一個對象ID包裝您的ID。這告訴mongo db你在尋找_id列的特定列。

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

那麼就

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