¿Cómo busco un objeto por su ObjectId en la consola?

Encontré esta pregunta respondida para C # y Perl, pero no en la interfaz nativa. Pensé que esto funcionaría:

db.theColl.find( { _id: ObjectId("4ecbe7f9e8c1c9092c000027") } )

La consulta no arrojó resultados. Encontré el 4ecbe7f9e8c1c9092c000027 haciendo db.theColl.find() y tomando un ObjectId. Hay varios miles de objetos en esa colección.

He leído todas las páginas que pude encontrar en el sitio web mongodb.org y no las encontré. ¿Es esto algo extraño de hacer? Me parece bastante normal.

No es extraño en absoluto, la gente hace esto todo el tiempo. Asegúrese de que el nombre de la colección sea correcto (el caso es importante) y que ObjectId es exacto.

La documentación está aquí

 > db.test.insert({x: 1}) > db.test.find() // no criteria { "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 } > db.test.find({"_id" : ObjectId("4ecc05e55dd98a436ddcc47c")}) // explicit { "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 } > db.test.find(ObjectId("4ecc05e55dd98a436ddcc47c")) // shortcut { "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 } 

Aún más fácil, especialmente con la finalización de tabs:

 db.test.find(ObjectId('4ecc05e55dd98a436ddcc47c')) 

Editar: también funciona con el comando findOne para una salida más bonita.

Si está utilizando Node.js:

 > var ObjectId = require('mongodb').ObjectId; > var id = req.params.gonderi_id; > var o_id = new ObjectId(id); > db.test.find({_id:o_id}) 

Editar: corregido a un nuevo ObjectId (id), no a un nuevo ObjectID (id)

Te has perdido para insertar comillas dobles. La consulta exacta es

 db.theColl.find( { "_id": ObjectId("4ecbe7f9e8c1c9092c000027") } ) 

Una vez que haya abierto la CLI mongo, estará conectada y autorizada en la base de datos correcta.

El siguiente ejemplo muestra cómo encontrar el documento con el _id = 568c28fffc4be30d44d0398e de una colección llamada “productos”:

 db.products.find({"_id": ObjectId("568c28fffc4be30d44d0398e")}) 

Acabo de tener este problema y estaba haciendo exactamente lo que estaba documentado y todavía no estaba funcionando.

Mire su mensaje de error y asegúrese de que no tiene ningún carácter especial copiado. Estaba obteniendo el error

 SyntaxError: illegal character @(shell):1:43 

Cuando fui al personaje 43 fue solo el comienzo de mi ID de objeto, después de las comillas abiertas, exactamente como lo pegué. Puse mi cursor allí y presioné retroceso, nada parecía suceder cuando debería haber eliminado la cita abierta. Golpeé nuevamente el espacio de retroceso y eliminé la cita abierta, luego volví a poner la cita y ejecuté la consulta, y funcionó, a pesar de parecer exactamente igual.

Estaba haciendo desarrollo en WebMatrix y copié la identificación del objeto desde la consola. Cada vez que copie de la consola en WebMatrix es probable que recoja algunos caracteres invisibles que causarán errores.

Creo que será mejor que escribas algo como esto:

 db.getCollection('Blog').find({"_id":ObjectId("58f6724e97990e9de4f17c23")}) 

Para usar el método Objectid no es necesario importarlo. Ya está en el objeto mongodb.

 var ObjectId = new db.ObjectId('58c85d1b7932a14c7a0a320d'); db.yourCollection.findOne({ _id: ObjectId }, function (err, info) { console.log(info) }); 

Simplemente hazlo:

 db.getCollection('test').find('4ecbe7f9e8c1c9092c000027');