Så jag kunde komma runt det här problemet genom att ändra frågan så att den tittar efter ett fält som uppdateras samtidigt men som inte är kapslat. Jag tror att problemet med att leta efter ett kapslat fält är att ChangeEvent
s updateDescription
egenskapen innehåller inte det faktiska kapslade objektet som har ändrats; istället innehåller den punktnotationsrepresentationen av förändringen. Så om du tittar på Uppdatering 2 i mitt inlägg ser du att updatedFields
har detta värde:{\"someOtherField\":310,\"message.fansNo\":1...
istället för {\"someOtherField\":310,\"message\":{\"fansNo\":1...
. Genom att använda message.fansNo
i $match-frågan kommer Mongo att leta efter denna objektform:{\"message\":{\"fansNo\":1...
, vilket inte stämmer överens i det här fallet. En "riktig" lösning här kan vara att undkomma .
i message.fansNo
i mitt matchuttryck, men jag kunde inte få det att fungera (se den här tråden
).
Så "lösningen" som fungerade för mig är egentligen bara en lösning som fungerar för mitt specifika användningsfall:det händer att someOtherField
uppdateras alltid tillsammans med message.fansNo
och someOtherField
är inte kapslad. Så jag kan matcha someOtherField
utan att oroa sig för häckning. I grund och botten ger detta matchningsuttryck mig de resultat jag vill ha:
{
"$or": [
{
"updateDescription.updatedFields.someOtherField": {"$exists":true}
},
{
"updateDescription.updatedFields.someOtherField":{"$exists":true}
}
]
}
Hoppas detta hjälper någon annan!