Apa yang Anda lihat dalam hasil itu benar. Pendekatan Anda agak salah. Jika Anda menginginkan hasil yang Anda harapkan, Anda harus menggunakan pendekatan ini:
collection.aggregate([
{$match:{greetings:{$elemMatch:query}}},
{$unwind:"$greetings"},
{$match:{"greetings.hello":"world"}},
]).toArray()
Dengan ini, Anda akan mendapatkan output berikut:
[
{greetings:{hello:"world"}},
{greetings:{hello:"world"}},
{greetings:{"hello":"world","extra":"data"}
]
Kapan pun Anda menggunakan aggregation
di MongoDB dan ingin membuat saluran agregasi yang menghasilkan dokumen yang Anda harapkan, Anda harus selalu memulai kueri dengan tahap pertama. Dan akhirnya tambahkan tahapan untuk memantau output dari tahapan berikutnya.
Output dari $unwind
. Anda panggungnya adalah:
[{
greetings:{hello:"world"}
},
{
greetings:{hello:"world", extra:"data"}
},
{
greetings:{hello:"world"}
},
{
greetings:{aloha:"mars"}
}]
Sekarang jika kami menyertakan tahap ketiga yang Anda gunakan, maka itu akan cocok untuk greetings
kunci yang memiliki nilai {hello:"world"}
dan dengan nilai yang tepat itu, ia hanya akan menemukan dua dokumen di dalam pipa. Jadi, Anda hanya akan mendapatkan:
{ "greetings" : { "hello" : "world" } }
{ "greetings" : { "hello" : "world" } }