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

Seleziona il documento che ha una coppia di valori chiave particolare ma non ha un'altra coppia di valori chiave

Il tuo tentativo di query utilizza la stessa "chiave" due volte. Non puoi farlo in una struttura di oggetti poiché stai essenzialmente "sovrascrivendo" il valore della stessa chiave. Quindi la query effettiva considerata è solo la "seconda" condizione per quella chiave.

Quindi, se vuoi avere più condizioni per la stessa chiave, usa $and operatore:

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

Oppure, poiché tutte le condizioni MongoDB sono in realtà argomenti "e" per impostazione predefinita, puoi anche specificare $eq in questo caso:

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

Notando qui che non c'è niente di speciale in .aggregate() qui stesso, in quanto è solo la parte "query" di base che sta facendo il lavoro di selezione del documento.

Si noti inoltre che con una condizione "positiva" presente ( $eq ) non è proprio necessario utilizzare $exists poiché stai già verificando che almeno quell'elemento deve corrispondere.