Så jeg var i stand til at omgå dette problem ved at ændre forespørgslen til at holde øje med et felt, der bliver opdateret på samme tid, men ikke er indlejret. Jeg tror, at problemet med at tjekke efter et indlejret felt er, at ChangeEvent
's updateDescription
egenskaben indeholder ikke det faktiske indlejrede objekt, der er ændret; i stedet indeholder den punktnotationsrepræsentationen af ændringen. Så hvis du ser på Opdatering 2 i mit indlæg vil du se det updatedFields
har denne værdi:{\"someOtherField\":310,\"message.fansNo\":1...
i stedet for {\"someOtherField\":310,\"message\":{\"fansNo\":1...
. Ved at bruge message.fansNo
i $match-forespørgslen vil Mongo lede efter denne objektform:{\"message\":{\"fansNo\":1...
, hvilket ikke stemmer overens i dette tilfælde. En "rigtig" løsning her kunne være at undslippe .
i message.fansNo
i mit matchudtryk, men jeg kunne ikke få det til at virke (se denne tråd
).
Så den "løsning", der fungerede for mig, er i virkeligheden bare en løsning, der fungerer for min specifikke use-case:det sker, at someOtherField
er altid opdateret sammen med message.fansNo
og someOtherField
er ikke indlejret. Så jeg kan matche someOtherField
uden at bekymre dig om rede. Grundlæggende giver dette matchudtryk mig de resultater, jeg ønsker:
{
"$or": [
{
"updateDescription.updatedFields.someOtherField": {"$exists":true}
},
{
"updateDescription.updatedFields.someOtherField":{"$exists":true}
}
]
}
Håber dette hjælper en anden!