MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongodb ne peut pas interroger le sous-document par ID (renvoie null)

Vous n'interrogez pas un ObjectId, peu importe à quel point vous pensez l'être. Vous interrogez l'ObjectId encodé sous la forme d'une chaîne hexadécimale, qui n'est pas la même chose. Faites une bonne typographie et vous aurez probablement beaucoup plus de succès.

Modifié pour élaborer, à partir d'un 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" }

Après notre discussion IRC, il semble y avoir des difficultés à comprendre les "termes interrogeables" dans les réponses qui vous sont données. Recherchez ici sur StackOverflow (ou Google ou DDG) "mongoose typecast ObjectId" (sans guillemets ; ou simplement "mongoose ObjectId"…) et vous trouverez de nombreuses réponses, car il s'agit d'un problème particulièrement courant pour les utilisateurs de Mongoose.