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

Selecione o documento com um par de valores-chave específico, mas sem outro par de valores-chave


Sua tentativa de consulta usa a mesma "chave" duas vezes. Você não pode fazer isso em uma estrutura de objeto, pois está essencialmente "sobrescrevendo" o valor da mesma chave. Portanto, a consulta real considerada é apenas a "segunda" condição para essa chave.

Portanto, se você deseja ter várias condições para a mesma chave, use o $and operador:
db.collection.aggregate([
    { "$match": {
        "$and": [
            { "genericParams.key": { "$exists": true, "$ne": "manual_funds_processed" } },
            { "genericParams.key": "third_sms_email_time" }
        ] 
    },
    // other stages
})

Ou, como todas as condições do MongoDB são realmente argumentos "e" por padrão, você também pode especificar $eq nesse caso:
db.collection.aggregate([
    { "$match": {
        "genericParams.key": { 
            "$ne": "manual_refund_processed", 
            "$eq": "third_sms_email_time"
        }
    }},
    // other stages
])

Observando aqui que não há nada de especial em .aggregate() aqui em si, pois é apenas a parte de "consulta" de base que está fazendo o trabalho de seleção de documentos.

Observe também que com uma condição "positiva" presente ( o $eq ) não é realmente necessário usar o $exists já que você já está testando que pelo menos esse elemento precisa corresponder.