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

Seleccionar documento que tenga un par de valores clave particular pero que no tenga otro par de valores clave

Su intento de consulta utiliza la misma "clave" dos veces. No puede hacer eso en una estructura de objeto ya que esencialmente está "sobreescribiendo" el valor de la misma clave. Entonces, la consulta real considerada es solo la "segunda" condición para esa clave.

Entonces, si desea tener múltiples condiciones para la misma clave, use $and operador:

db.collection.aggregate([
    { "$match": {
        "$and": [
            { "genericParams.key": { "$exists": true, "$ne": "manual_funds_processed" } },
            { "genericParams.key": "third_sms_email_time" }
        ] 
    },
    // other stages
})

O dado que todas las condiciones de MongoDB son realmente argumentos "y" por defecto, también puede especificar $eq en este caso:

db.collection.aggregate([
    { "$match": {
        "genericParams.key": { 
            "$ne": "manual_refund_processed", 
            "$eq": "third_sms_email_time"
        }
    }},
    // other stages
])

Notando aquí que no hay nada especial en .aggregate() aquí mismo, ya que es solo la parte base de "consulta" la que está haciendo el trabajo de selección de documentos.

También tenga en cuenta que con una condición "positiva" presente (el $eq ) no es realmente necesario usar $exists ya que ya está probando que al menos ese elemento debe coincidir.