sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb kan inte fråga underdokument med ID (returnerar null)

Du frågar inte efter ett ObjectId, oavsett hur mycket du tror att du är. Du frågar efter ObjectId kodad som en hexideciell sträng, vilket är inte samma sak. Rätt typcast och du kommer sannolikt att ha mycket mer framgång.

Redigerat för att utveckla, från ett mongo (JS) REPL-skal:

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

Efter vår IRC-diskussion verkar det vara svårt att förstå de "sökbara termerna" i svaren du får. Sök här på StackOverflow (eller Google, eller DDG) efter "mongoose typecast ObjectId" (utan citattecken; eller bara "mongoose ObjectId"...) och du kommer att hitta många svar, eftersom detta är ett särskilt vanligt problem för Mongoose-användare.



  1. Lyssna efter ändringar i Redis?

  2. allowDiskUse i Aggregation Framework med MongoDB C#-drivrutin

  3. Få ett värde i en referens av en uppslagning med MongoDB och Golang

  4. mongoDB-fel:Fel:kunde inte ansluta till [localhost:27017]