Takže jsem byl schopen tento problém obejít změnou dotazu tak, aby sledoval pole, které se aktualizuje ve stejnou dobu, ale není vnořené. Myslím, že problém s kontrolou vnořeného pole je v tom, že ChangeEvent
updateDescription
vlastnost neobsahuje skutečný vnořený objekt, který se změnil; místo toho obsahuje tečkovou reprezentaci změny. Pokud se tedy podíváte na Aktualizaci 2 v mém příspěvku uvidíte, že updatedFields
má tuto hodnotu:{\"someOtherField\":310,\"message.fansNo\":1...
místo {\"someOtherField\":310,\"message\":{\"fansNo\":1...
. Pomocí message.fansNo
v dotazu $match bude Mongo hledat tento tvar objektu:{\"message\":{\"fansNo\":1...
, což se v tomto případě neshoduje. "Skutečným" řešením by zde mohlo být opuštění .
v message.fansNo
v mém výrazu shody, ale nepodařilo se mi to uvést do provozu (viz toto vlákno
).
Takže „řešení“, které pro mě fungovalo, je ve skutečnosti jen řešením, které funguje pro můj konkrétní případ použití:stalo se, že someOtherField
je vždy aktualizován spolu s message.fansNo
a someOtherField
není vnořeno. Takže mohu porovnat someOtherField
bez obav z hnízdění. Tento výraz mi v podstatě dává výsledky, které chci:
{
"$or": [
{
"updateDescription.updatedFields.someOtherField": {"$exists":true}
},
{
"updateDescription.updatedFields.someOtherField":{"$exists":true}
}
]
}
Doufám, že to pomůže někomu dalšímu!