2011-07-29 9 views
10

Estoy tratando de encontrar un registro en MongoDB por su campo MongoId "_id". He encontrado ejemplos sobre cómo hacerlo, pero no puedo hacer que funcione. Ejemplo:Por qué no puedo encontrar un registro por _id en 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); 

Genera:

MongoCursor (
) 

nada dentro.

He comprobado todo lo demás está trabajando por el cambio de "_id" por encima de un campo diferente, como "Nombre" y pasando un nombre de pila y volver datos válidos.

¿Por qué esto no funciona?

Incluso he intentado buscar con $ RECID como una cadena, no hay diferencia.

Esto es lo que sucede desde la consola mongo (aunque no estoy seguro si estoy consultando correctamente):

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

Aviso nada devuelto para ello o _id.

+0

¿Se puede encontrarlo mediante shell interactivo mongodb? – KaKa

Respuesta

26

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

+2

Ok, eso funciona desde el shell, pero no funciona desde php usando mi código anterior. –

+1

Así que revisé mi código php nuevamente y está funcionando ahora. No tengo ni idea de porqué. Sin embargo, fue bueno aprender sobre el caparazón de mongodb. –

4

se puede envolver alrededor de su identificador de un contenedor de objeto. Esto le dice a mongo db que busca una columna específica en la columna _id.

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

luego hacer

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