sql >> Base de Datos >  >> NoSQL >> MongoDB

Mi selector $or en una expresión de coincidencia de activador de base de datos no funciona en el segundo nivel de anidamiento al configurar un activador de base de datos

Así que pude solucionar este problema cambiando la consulta para buscar un campo que se actualice al mismo tiempo pero que no esté anidado. Creo que el problema de verificar un campo anidado es que ChangeEvent updateDescription la propiedad no contiene el objeto anidado real que ha cambiado; en su lugar, contiene la representación en notación de puntos del cambio. Entonces, si observa la Actualización 2 en mi publicación verás que updatedFields tiene este valor:{\"someOtherField\":310,\"message.fansNo\":1... en lugar de {\"someOtherField\":310,\"message\":{\"fansNo\":1... . Usando message.fansNo en la consulta $match, Mongo buscará esta forma de objeto:{\"message\":{\"fansNo\":1... , que no coincide en este caso. Una solución "real" aquí podría ser escapar del . en message.fansNo en mi expresión de coincidencia, pero no pude hacer que funcionara (ver este hilo ).

Entonces, la "solución" que funcionó para mí es realmente solo una solución alternativa que funciona para mi caso de uso específico:sucede que someOtherField siempre se actualiza junto con message.fansNo y someOtherField no está anidado. Entonces puedo hacer coincidir someOtherField sin preocuparse por anidar. Básicamente, esta expresión de coincidencia me da los resultados que quiero:

{
  "$or": [
    {
      "updateDescription.updatedFields.someOtherField": {"$exists":true}
    },
    {
      "updateDescription.updatedFields.someOtherField":{"$exists":true}
    }
  ]
}

¡Espero que esto ayude a alguien más!