Така че успях да заобиколя този проблем, като промених заявката, за да следя за поле, което се актуализира по същото време, но не е вложено. Мисля, че проблемът с проверката за вложено поле е, че ChangeEvent
updateDescription
на 's свойството не съдържа действителния вложен обект, който е променен; вместо това съдържа точковото представяне на промяната. Така че, ако погледнете Актуализация 2 в публикацията ми ще видите това updatedFields
има тази стойност:{\"someOtherField\":310,\"message.fansNo\":1...
вместо {\"someOtherField\":310,\"message\":{\"fansNo\":1...
. Чрез използване на message.fansNo
в заявката $match Mongo ще търси тази форма на обект:{\"message\":{\"fansNo\":1...
, което не съвпада в този случай. „Истинско“ решение тук може да бъде избягване на .
в message.fansNo
в моя израз за съвпадение, но не можах да накарам това да работи (вижте тази тема
).
Така че „решението“, което работи за мен, всъщност е просто заобиколно решение, което работи за моя конкретен случай на употреба:така се случва, че someOtherField
винаги се актуализира заедно с message.fansNo
и someOtherField
не е вложено. Така че мога да съпоставя someOtherField
без да се притеснявате за гнездене. По принцип този израз за съвпадение ми дава резултатите, които искам:
{
"$or": [
{
"updateDescription.updatedFields.someOtherField": {"$exists":true}
},
{
"updateDescription.updatedFields.someOtherField":{"$exists":true}
}
]
}
Надявам се това да помогне на някой друг!