Dus ik kon dit probleem omzeilen door de query te wijzigen om te kijken naar een veld dat tegelijkertijd wordt bijgewerkt maar niet is genest. Ik denk dat het probleem met het controleren op een genest veld is dat de ChangeEvent
's updateDescription
eigenschap bevat niet het daadwerkelijke geneste object dat is gewijzigd; in plaats daarvan bevat het de puntnotatieweergave van de wijziging. Dus als je kijkt naar Update 2 in mijn bericht zie je dat updatedFields
heeft deze waarde:{\"someOtherField\":310,\"message.fansNo\":1...
in plaats van {\"someOtherField\":310,\"message\":{\"fansNo\":1...
. Door message.fansNo
. te gebruiken in de $match-query zoekt Mongo naar deze objectvorm:{\"message\":{\"fansNo\":1...
, wat in dit geval niet overeenkomt. Een "echte" oplossing zou hier kunnen zijn om te ontsnappen aan de .
in message.fansNo
in mijn match-expressie, maar ik kon dat niet laten werken (zie deze draad
).
Dus de "oplossing" die voor mij werkte, is eigenlijk gewoon een tijdelijke oplossing die werkt voor mijn specifieke gebruik:het gebeurt zo dat someOtherField
wordt altijd bijgewerkt samen met message.fansNo
, en someOtherField
is niet genest. Zodat ik someOtherField
kan matchen zonder je zorgen te maken over nesten. In principe geeft deze match-expressie me de resultaten die ik wil:
{
"$or": [
{
"updateDescription.updatedFields.someOtherField": {"$exists":true}
},
{
"updateDescription.updatedFields.someOtherField":{"$exists":true}
}
]
}
Ik hoop dat dit iemand anders helpt!