Ich konnte dieses Problem umgehen, indem ich die Abfrage so änderte, dass sie nach einem Feld Ausschau hält, das gleichzeitig aktualisiert wird, aber nicht verschachtelt ist. Ich denke, das Problem bei der Suche nach einem verschachtelten Feld ist, dass das ChangeEvent
's updateDescription
Eigenschaft enthält nicht das eigentliche verschachtelte Objekt, das sich geändert hat; stattdessen enthält es die Punktnotationsdarstellung der Änderung. Wenn Sie sich also Update 2 ansehen In meinem Beitrag sehen Sie diese updatedFields
hat diesen Wert:{\"someOtherField\":310,\"message.fansNo\":1...
statt {\"someOtherField\":310,\"message\":{\"fansNo\":1...
. Durch die Verwendung von message.fansNo
In der $match-Abfrage sucht Mongo nach dieser Objektform:{\"message\":{\"fansNo\":1...
, was in diesem Fall nicht passt. Eine "echte" Lösung könnte hier sein, den .
zu maskieren in message.fansNo
in meinem Match-Ausdruck, aber ich konnte das nicht zum Laufen bringen (siehe dieser Thread
).
Die "Lösung", die für mich funktioniert hat, ist also wirklich nur eine Problemumgehung, die für meinen spezifischen Anwendungsfall funktioniert:Es passiert also, dass someOtherField
wird immer zusammen mit message.fansNo
aktualisiert und someOtherField
ist nicht verschachtelt. So kann ich someOtherField
abgleichen ohne sich Gedanken über das Verschachteln zu machen. Im Grunde liefert mir dieser Übereinstimmungsausdruck die gewünschten Ergebnisse:
{
"$or": [
{
"updateDescription.updatedFields.someOtherField": {"$exists":true}
},
{
"updateDescription.updatedFields.someOtherField":{"$exists":true}
}
]
}
Hoffe, das hilft jemand anderem!