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

Il mio selettore $ o in un'espressione di corrispondenza del trigger di database non funziona al secondo livello di nidificazione durante la configurazione di un trigger di database

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!