MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb kann Unterdokument nicht nach ID abfragen (gibt null zurück)

Sie fragen nicht nach einer ObjectId, egal wie viel Sie denken. Sie fragen nach der ObjectId ab, die als hexadeziale Zeichenfolge codiert ist, was nicht ist das gleiche. Richtig typisiert und Sie werden wahrscheinlich viel mehr Erfolg haben.

Ausführlich bearbeitet, aus einer Mongo (JS) REPL-Shell:

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

Nach unserer IRC-Diskussion scheint es Schwierigkeiten zu geben, die "durchsuchbaren Begriffe" in den Antworten zu verstehen, die Sie erhalten. Suchen Sie hier auf StackOverflow (oder Google oder DDG) nach „mongoose typecast ObjectId“ (ohne Anführungszeichen; oder einfach „mongoose ObjectId“…) und Sie werden viele Antworten finden, da dies ein besonders häufiges Problem für Mongoose-Benutzer ist.