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

Agregat Moongoose $match tidak cocok dengan id

ids . Anda variabel akan dibangun dari "string", dan bukan ObjectId nilai.

Nilai string "autocasts" luwak untuk ObjectId ke dalam jenisnya yang benar dalam kueri reguler, tetapi ini tidak terjadi dalam alur agregasi, seperti yang dijelaskan dalam edisi #1399.

Sebagai gantinya, Anda harus melakukan casting yang benar untuk mengetik secara manual:

ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })

Kemudian Anda dapat menggunakannya di tahap saluran Anda:

{ "$match": { "_id": { "$in": ids } } }

Alasannya adalah karena agregasi pipeline "biasanya" mengubah struktur dokumen, dan oleh karena itu luwak tidak menganggap bahwa "skema" berlaku untuk dokumen dalam tahap pipeline tertentu.

Dapat dikatakan bahwa tahap pipa "pertama" ketika itu adalah $match tahap harus melakukan ini, karena memang dokumen tidak diubah. Tapi saat ini tidak seperti itu.

Nilai apa pun yang mungkin berupa "string" atau setidaknya bukan jenis BSON yang benar harus dilemparkan secara manual agar cocok.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Variabel Agregasi MongoDB SEKARANG

  2. SocketException:Alamat sudah digunakan MONGODB

  3. Bagaimana cara meratakan subdokumen ke tingkat root di MongoDB?

  4. Cara menulis kueri gabungan di mongoDB

  5. Pencarian Teks Penuh dan Sebagian MongoDB