2011-11-22 4 views
149

Ho trovato questa domanda risposta per C# e Perl, ma non nell'interfaccia nativa. Ho pensato che questo avrebbe funzionato:come posso cercare un oggetto con il suo ObjectId nella console?

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

La query ha restituito alcun risultato. 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.

risposta

235

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

documentazione è here

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

Strano, ho riavviato la mia console e ha funzionato subito. C'è un modo per cambiare il tuo "scope" o qualcosa sulla riga di comando e non saperlo davvero? – jcollum

+0

Non c'è da meravigliarsi: quando cerco 'find ObjectID' quella pagina non è arrivata: http://www.mongodb.org/dosearchsite.action?queryString=find+ObjectId&where=DOCS – jcollum

+0

Sì, potresti aver accidentalmente digitato " usa dbname "e cambia database. Suppongo che tu non stia utilizzando la replica o il sharding, il che ovviamente creerebbe altre possibilità per il motivo per cui non è stato mostrato. –

56

Ancora più facile, in particolare con il completamento scheda:

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

Edit: funziona anche con il comando findOne per l'uscita più bella.

+0

se vogliamo cercare con più oggetti ID proprio come il modo in cui implementiamo la condizione WHERE IN in mysql. – Pratswinz

+0

Questo mi dà un errore: TypeError: filter deve essere un'istanza di dict, bson.son.SON o altro tipo che eredita da collections.Mapping –

+1

@DavidOkwii - questo esempio è per MongoShell. Sembra che tu stia correndo da Python, nel qual caso dovresti fare qualcosa del tipo: 'db.test.find ({'_ id': ObjectId ('4ecc05e55dd98a436ddcc47c')})' – MPlanchard

10

Ti sei perso per inserire virgolette doppie. Il Query esatta è

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

"Il problema era che non ero metto le virgolette sul mio _id. " - 7 dicembre 2011, vedere i commenti sulla prima risposta – jcollum

+0

@jcollum Come aggiornamento, la query che hai inserito ora sarebbe valida senza le virgolette attorno a _id. – AnimalTesting

43

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

Edit: corretto per nuove ObjectId (id), non è nuovo ObjectID (id)

+1

state soffrendo con questo! tx –

-3

semplicemente :

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

Questo non funziona con la versione 3.2.7 di 'Mongo Shell'. – zatziky

+0

Ciò corrisponderà solo a _id che è una stringa; se è un vero ObjectId, devi cercare usando la sintassi ObjectId. –

2

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

Guarda il tuo messaggio di errore e assicurarsi che non si dispone di caratteri speciali copiati. Stavo ottenendo l'errore

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

Quando sono andato a carattere 43 che era solo l'inizio della mia ID oggetto, dopo le virgolette aperte, esattamente come l'ho incollato. Ho messo il mio 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 ho copiato l'ID oggetto dalla console. Ogni volta che si copia dalla console in WebMatrix è probabile che si raccolgano alcuni caratteri invisibili che causano errori.

3

Una volta aperta la CLO mongo, collegata e autorizzata nel database corretto.

The following example shows how to find the document with the _id=568c28fffc4be30d44d0398e from a collection called “products”:

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

penso che è meglio scrivere qualcosa del genere:

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

Puoi spiegare un po 'come questo codice risponde alla domanda? –

0

Per utilizzare ObjectID metodo che non c'è bisogno di importarlo. È già sull'oggetto mongodb.

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

+1

No: 'TypeError: db.ObjectId non è una funzione ' – jorisw

+0

È solo' ObjectId ("SOMETHING") ' – Andy

Problemi correlati