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');