MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongodb не може да търси поддокумент по ID (връща нула)

Вие не търсите ObjectId, независимо колко си мислите, че сте. Вие правите заявка за ObjectId, кодиран като шестнадесетичен низ, който не е едно и също нещо. Правилно типизирайте и вероятно ще имате много по-голям успех.

Редактирано за уточняване, от mongo (JS) REPL обвивка:

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

След нашата IRC дискусия изглежда има трудности при разбирането на „търсените термини“ в отговорите, които получавате. Потърсете тук в StackOverflow (или Google, или DDG) за „mongoose typecast ObjectId“ (без кавички; или просто „mongoose ObjectId“…) и ще намерите много отговори, тъй като това е особено често срещан проблем за потребителите на Mongoose.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb заявка, използваща _id обект в търсене на localField

  2. Динамични заявки на MongoRepository

  3. 3 начина да изберете реда с минимална стойност в SQL

  4. mongoDB map/reduce минус намалението

  5. Как да анализирате използването на диск от Docker контейнер