Quindi sono stato in grado di aggirare questo problema modificando la query per cercare un campo che viene aggiornato contemporaneamente ma non nidificato. Penso che il problema con il controllo di un campo nidificato sia che ChangeEvent
updateDescription
di la proprietà non contiene l'oggetto nidificato effettivo che è stato modificato; contiene invece la rappresentazione in notazione a punti della modifica. Quindi, se guardi Aggiornamento 2 nel mio post vedrai che updatedFields
ha questo valore:{\"someOtherField\":310,\"message.fansNo\":1...
invece di {\"someOtherField\":310,\"message\":{\"fansNo\":1...
. Usando message.fansNo
nella query $match, Mongo cercherà questa forma di oggetto:{\"message\":{\"fansNo\":1...
, che in questo caso non corrisponde. Una soluzione "reale" qui potrebbe essere quella di sfuggire al .
in message.fansNo
nella mia espressione di corrispondenza, ma non sono riuscito a farlo funzionare (vedi questo thread
).
Quindi la "soluzione" che ha funzionato per me è davvero solo una soluzione alternativa che funziona per il mio caso d'uso specifico:succede che someOtherField
è sempre aggiornato insieme a message.fansNo
e someOtherField
non è nidificato. Quindi posso abbinare someOtherField
senza preoccuparsi della nidificazione. Fondamentalmente questa espressione di corrispondenza mi dà i risultati che desidero:
{
"$or": [
{
"updateDescription.updatedFields.someOtherField": {"$exists":true}
},
{
"updateDescription.updatedFields.someOtherField":{"$exists":true}
}
]
}
Spero che questo aiuti qualcun altro!