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.