Udało mi się więc obejść ten problem, zmieniając zapytanie, aby obserwować pole, które jest aktualizowane w tym samym czasie, ale nie jest zagnieżdżone. Myślę, że problem ze sprawdzaniem pola zagnieżdżonego polega na tym, że ChangeEvent
updateDescription
właściwość nie zawiera rzeczywistego obiektu zagnieżdżonego, który uległ zmianie; zamiast tego zawiera reprezentację zmiany w notacji kropkowej. Więc jeśli spojrzysz na Aktualizację 2 w moim poście zobaczysz, że updatedFields
ma tę wartość:{\"someOtherField\":310,\"message.fansNo\":1...
zamiast {\"someOtherField\":310,\"message\":{\"fansNo\":1...
. Używając message.fansNo
w zapytaniu $match Mongo będzie szukać tego kształtu obiektu:{\"message\":{\"fansNo\":1...
, co w tym przypadku nie pasuje. „Prawdziwym” rozwiązaniem może być uniknięcie .
w message.fansNo
w moim wyrażeniu dopasowującym, ale nie udało mi się, aby to zadziałało (patrz ten wątek
).
Tak więc „rozwiązanie”, które zadziałało dla mnie, jest tak naprawdę obejściem, które działa w moim konkretnym przypadku użycia:zdarza się, że someOtherField
jest zawsze aktualizowany wraz z message.fansNo
i someOtherField
nie jest zagnieżdżony. Więc mogę dopasować someOtherField
bez martwienia się o zagnieżdżanie. Zasadniczo to wyrażenie dopasowujące daje mi oczekiwane wyniki:
{
"$or": [
{
"updateDescription.updatedFields.someOtherField": {"$exists":true}
},
{
"updateDescription.updatedFields.someOtherField":{"$exists":true}
}
]
}
Mam nadzieję, że to pomoże komuś innemu!