MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Mongodb Tidak Dapat Mengkueri SubDocument berdasarkan ID (mengembalikan null)

Anda tidak menanyakan ObjectId, tidak peduli seberapa banyak Anda berpikir. Anda menanyakan ObjectId yang dikodekan sebagai string heksadesimal, yang bukan hal yang sama. Ketik dengan benar dan kemungkinan besar Anda akan jauh lebih sukses.

Diedit untuk menguraikan, dari 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" }

Setelah diskusi IRC kami, tampaknya ada kesulitan dalam memahami "istilah yang dapat dicari" dalam jawaban yang Anda berikan. Cari di sini di StackOverflow (atau Google, atau DDG) untuk "luwak typecast ObjectId" (tanpa tanda kutip; atau hanya "luwak ObjectId"...) dan Anda akan menemukan banyak jawaban, karena ini adalah masalah yang sangat umum bagi pengguna Mongoose.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara menggunakan Enkripsi untuk Melindungi data MongoDB

  2. Apa kelemahan menyimpan Guid sebagai String di MongoDB?

  3. Hash grup Ruby berdasarkan nilai kunci

  4. Pencarian agregasi Mongodb dengan kondisi

  5. Bagaimana cara mengubah urutan array dengan MongoDB?