2011-07-29 5 views
10

mongoDB의 레코드를 MongoID "_id"필드로 찾으려고합니다. 나는 그것을하는 방법에 대한 예제를 발견했지만 그것을 작동시키지 못합니다. 예 :mongodb에서 _id로 레코드를 찾을 수없는 이유는 무엇입니까?

$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를 문자열로 사용해도 차이는 없습니다.

여기에 (내가 제대로 조회하고 만약 내가 확실하지 오전하지만)이 몽고 쉘에서 발생하는 것입니다 :

> 
> 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 반환하지 않습니다.

+0

당신은 MongoDB를 대화 형 쉘을 사용하여 찾을 수 다음합니까? – KaKa

답변

26

당신이 OBJECTID 래퍼 주위에 당신의 ID를 포장 할 수 db.Employee.find({_id:ObjectId("4e209564203d83940f000006")}

+2

좋아, 그 껍질에서 작동하지만 위의 코드를 사용하여 PHP에서 작동하지 않습니다. –

+1

그래서 다시 PHP 코드를 검토 한 결과 이제 작동 중입니다. 나는 이유를 모른다. 그것은 mongodb 껍질에 대해 좋은 학습이었다. –

4

을보십시오. 이것은 mongo db에게 특정 컬럼에 대해 _id 컬럼을 찾는 것을 알려줍니다.

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

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