come posso cercare un object con il suo ObjectId nella console?

Ho trovato risposta a questa domanda per C # e Perl, ma non nell’interfaccia nativa. Ho pensato che questo avrebbe funzionato:

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

La query non ha restituito risultati. Ho trovato il 4ecbe7f9e8c1c9092c000027 facendo db.theColl.find() e afferrando un ObjectId. Ci sono diverse migliaia di oggetti in quella collezione.

Ho letto tutte le pagine che ho trovato sul sito web mongodb.org e non l’ho trovato. È solo una cosa strana da fare? Mi sembra abbastanza normale.

Non è affatto strano, le persone lo fanno sempre. Assicurati che il nome della raccolta sia corretto (caso pertinente) e che l’ObjectId sia esatto.

La documentazione è qui

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

Ancora più facile, specialmente con il completamento delle tabs:

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

Modifica: funziona anche con il comando findOne per un’uscita più carina.

Se stai usando 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}) 

Modifica: corretto al nuovo ObjectId (id), non nuovo ObjectID (id)

Ti sei perso per inserire le virgolette doppie. La query esatta è

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

Una volta aperta la CLI mongo, connessa e autorizzata sul database giusto.

L’esempio seguente mostra come trovare il documento con _id = 568c28fffc4be30d44d0398e da una raccolta denominata “prodotti”:

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

Ho appena avuto questo problema e stavo facendo esattamente come è stato documentato e non funzionava ancora.

Guarda il tuo messaggio di errore e assicurati di non aver copiato caratteri speciali. Stavo ricevendo l’errore

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

Quando sono passato al personaggio 43 era solo l’inizio del mio ID object, dopo le virgolette aperte, esattamente come l’ho incollato. Ho messo il cursore lì e ho premuto backspace. Sembrava che non succedesse nulla quando avrebbe dovuto rimuovere la citazione aperta. Ho colpito di nuovo backspace e rimosso la citazione aperta, quindi ho inserito la citazione e ho eseguito la query e ha funzionato, nonostante l’aspetto identico.

Stavo facendo lo sviluppo in WebMatrix e copiato l’ID object dalla console. Ogni volta che si copia dalla console in WebMatrix è probabile che si raccolgano alcuni caratteri invisibili che causano errori.

Penso che faresti meglio a scrivere qualcosa del genere:

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

Per utilizzare il metodo Objectid non è necessario importarlo. È già sull’object mongodb.

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

Basta fare:

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