2011-07-29 31 views
10

Tôi đang cố tìm bản ghi trong mongoDB bởi trường MongoID "_id" của nó. Tôi đã tìm thấy các ví dụ về cách làm điều đó, nhưng không thể làm cho nó hoạt động. Ví dụ:Tại sao tôi không thể tìm thấy hồ sơ bằng _id trong 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); 

Nó ra:

MongoCursor (
) 

Không có gì bên trong.

Tôi đã xác minh mọi thứ khác đang hoạt động bằng cách thay đổi "_id" ở trên thành một trường khác như "firstName" và chuyển tên và tôi lấy lại dữ liệu hợp lệ.

Tại sao tính năng này không hoạt động?

Tôi thậm chí đã thử tìm kiếm bằng $ recID dưới dạng chuỗi, không có sự khác biệt.

Đây là những gì xảy ra từ vỏ Mongo (mặc dù tôi không chắc chắn nếu tôi truy vấn đúng cách):

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

Thông báo không có gì trở cho id hoặc _id.

+0

Bạn có thể tìm thấy nó bằng cách sử vỏ tương tác MongoDB? – KaKa

Trả lời

26

Hãy thử db.Employee.find({_id:ObjectId("4e209564203d83940f000006")}

+2

Ok, hoạt động từ trình bao, nhưng nó không hoạt động từ php sử dụng mã của tôi ở trên. –

+1

Vì vậy, tôi đã xem lại mã php của mình và nó đang hoạt động ngay bây giờ. Tôi không biết tại sao. Đó là học tập tốt về vỏ mongodb mặc dù. –

4

bạn có thể quấn id của mình quanh trình bao bọc ObjectID. Điều này nói với mongo db bạn đang tìm một cột cụ thể là cột _id.

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

thì đừng

collection.findOne({_id: ObjectID(id)},function(err,user){ //blah blah} 
Các vấn đề liên quan