Jadi saya dapat mengatasi masalah ini dengan mengubah kueri untuk melihat bidang yang diperbarui pada saat yang sama tetapi tidak bersarang. Saya pikir masalah dengan memeriksa bidang bersarang adalah ChangeEvent updateDescription properti tidak berisi objek bersarang aktual yang telah berubah; melainkan berisi representasi titik-notasi dari perubahan. Jadi jika Anda melihat Pembaruan 2 di postingan saya, Anda akan melihat updatedFields memiliki nilai ini:{\"someOtherField\":310,\"message.fansNo\":1... bukannya {\"someOtherField\":310,\"message\":{\"fansNo\":1... . Dengan menggunakan message.fansNo dalam kueri $match, Mongo akan mencari bentuk objek ini:{\"message\":{\"fansNo\":1... , yang tidak cocok dalam kasus ini. Solusi "nyata" di sini adalah menghindari . di message.fansNo dalam ekspresi kecocokan saya, tetapi saya tidak dapat membuatnya berfungsi (lihat utas ini
).
Jadi "solusi" yang berhasil bagi saya sebenarnya hanyalah solusi yang berfungsi untuk kasus penggunaan khusus saya:kebetulan someOtherField selalu diperbarui bersama dengan message.fansNo , dan someOtherField tidak bersarang. Jadi saya bisa mencocokkan someOtherField tanpa khawatir bersarang. Pada dasarnya ekspresi kecocokan ini memberi saya hasil yang saya inginkan:
{
"$or": [
{
"updateDescription.updatedFields.someOtherField": {"$exists":true}
},
{
"updateDescription.updatedFields.someOtherField":{"$exists":true}
}
]
}
Semoga ini bisa membantu orang lain!