sql >> Database >  >> NoSQL >> MongoDB

Mongodb kan geen query uitvoeren op subdocument op ID (retourneert null)

U vraagt ​​niet om een ​​ObjectId, hoeveel u ook denkt te zijn. U zoekt naar de ObjectId die is gecodeerd als een hexadeciale tekenreeks, wat niet is hetzelfde. Typecast op de juiste manier en je zult waarschijnlijk veel meer succes hebben.

Bewerkt om uit te werken, van een 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" }

Na onze IRC-discussie lijken er problemen te zijn met het begrijpen van de "doorzoekbare termen" in de antwoorden die u krijgt. Zoek hier op StackOverflow (of Google, of DDG) naar "mongoose typecast ObjectId" (zonder aanhalingstekens; of gewoon "mongoose ObjectId"...) en u zult veel antwoorden vinden, aangezien dit een bijzonder veelvoorkomend probleem is voor Mongoose-gebruikers.



  1. MongoDB op mlab-verificatie mislukt

  2. wat zijn pagecache, dentries, inodes?

  3. Hoe stel ik _id in op db-document in Mongoose?

  4. Veel documenten in een gepartitioneerde verzameling in Azure CosmosDB verwijderen met MongoDB API