sql >> Databáze >  >> NoSQL >> MongoDB

Mongodb nemůže dotazovat poddokument podle ID (vrací hodnotu null)

Neptáte se na ObjectId, bez ohledu na to, jak moc si myslíte, že jste. Dotazujete se na ObjectId zakódovaný jako hexadecimální řetězec, což není ta samá věc. Správně přetypujte a pravděpodobně budete mít mnohem větší úspěch.

Upraveno tak, aby bylo propracované, z mongo (JS) REPL shellu:

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

Po naší IRC diskuzi se zdá, že je obtížné porozumět "vyhledávaným výrazům" v odpovědích, které dostáváte. Hledejte zde na StackOverflow (nebo Google, nebo DDG) „mongoose typecast ObjectId“ (bez uvozovek; nebo jen „mongoose ObjectId“…) a najdete mnoho odpovědí, protože toto je zvláště běžný problém pro uživatele Mongoose.



  1. Jak zkontrolovat připojení k mongodb

  2. Chyba při pokusu o aktualizaci prvku pole MongoDb

  3. Tři A zabezpečení MongoDB – autentizace, autorizace a audit

  4. Aplikaci se nepodařilo spustit (port 8080) není k dispozici