MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongodb non può eseguire query su SubDocument per ID (restituisce null)

Non stai cercando un ObjectId, non importa quanto pensi di essere. Stai cercando l'ObjectId codificato come stringa esadecimale, che non la stessa cosa. Typecast correttamente e probabilmente avrai molto più successo.

Modificato per elaborare, da una shell REPL mongo (JS):

> // Omitting the _id, or generating a new one, are equivalent during insert.
> db.foo.insert({_id: ObjectId()})
WriteResult({ "nInserted" : 1 })

> db.foo.find()  // As expected, we get back our _real_ ObjectId value.
{ "_id" : ObjectId("5c9cfab873724727778c0730") }

> // Can we "insert the record again" using a string version of the ID?
> db.foo.insert({_id: "5c9cfab873724727778c0730"})
WriteResult({ "nInserted" : 1 })  // Sure as heck can! No unique violation!

> db.foo.find()  // Because THESE ARE NOT THE SAME
{ "_id" : ObjectId("5c9cfab873724727778c0730") }
{ "_id" : "5c9cfab873724727778c0730" }

Dopo la nostra discussione su IRC, sembra esserci difficoltà nel comprendere i "termini ricercabili" nelle risposte che ti vengono fornite. Cerca qui su StackOverflow (o Google o DDG) "mongoose typecast ObjectId" (senza virgolette; o semplicemente "mongoose ObjectId"...) e troverai molte risposte, poiché questo è un problema particolarmente comune per gli utenti di Mongoose.