MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongodb não pode consultar o subdocumento por ID (retorna nulo)


Você não está consultando um ObjectId, não importa o quanto você pense que está. Você está consultando o ObjectId codificado como uma string hexadecial, que não a mesma coisa. Typecast apropriadamente e você provavelmente terá muito mais sucesso.

Editado para elaborar, a partir de um 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" }

Após nossa discussão no IRC, parece haver dificuldade em entender os "termos pesquisáveis" nas respostas que estão sendo dadas. Pesquise aqui no StackOverflow (ou Google, ou DDG) por "mongoose typecast ObjectId" (sem aspas; ou apenas "mangoose ObjectId"...) e você encontrará muitas respostas, pois esse é um problema particularmente comum para usuários do Mongoose.