MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Meu seletor $or em uma expressão de correspondência de gatilho de banco de dados não funciona no segundo nível de aninhamento ao configurar um gatilho de banco de dados


Então, consegui contornar esse problema alterando a consulta para observar um campo que é atualizado ao mesmo tempo, mas não está aninhado. Acho que o problema com a verificação de um campo aninhado é que o ChangeEvent 's updateDescription não contém o objeto aninhado real que foi alterado; em vez disso, ele contém a representação de notação de ponto da alteração. Então, se você olhar para Atualização 2 no meu post você verá que updatedFields tem este valor:{\"someOtherField\":310,\"message.fansNo\":1... em vez de {\"someOtherField\":310,\"message\":{\"fansNo\":1... . Usando message.fansNo na consulta $match, o Mongo procurará esta forma de objeto:{\"message\":{\"fansNo\":1... , que não corresponde neste caso. Uma solução "real" aqui poderia ser escapar do . em message.fansNo na minha expressão de correspondência, mas não consegui fazer isso funcionar (consulte este tópico ).

Portanto, a "solução" que funcionou para mim é realmente apenas uma solução alternativa que funciona para meu caso de uso específico:acontece que someOtherField é sempre atualizado junto com message.fansNo , e someOtherField não está aninhado. Para que eu possa corresponder a someOtherField sem se preocupar com o aninhamento. Basicamente, essa expressão de correspondência me dá os resultados que eu quero:
{
  "$or": [
    {
      "updateDescription.updatedFields.someOtherField": {"$exists":true}
    },
    {
      "updateDescription.updatedFields.someOtherField":{"$exists":true}
    }
  ]
}

Espero que isso ajude mais alguém!