sql >> Database teknologi >  >> NoSQL >> MongoDB

Min $or-vælger i et databasetrigger-match-udtryk virker ikke på andet niveau af indlejring, når jeg konfigurerer en databasetrigger

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!




  1. Flere skemareferencer i enkelt skemaarray - mongoose

  2. MongoDB Regular Expression:Indeholder en e-mail inde i en streng

  3. Hvordan får jeg objekt-ID'et, efter at jeg har gemt et objekt i Mongoose?

  4. MongoDB Erstat specifikke matrixværdier