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!