MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Sélectionnez le document ayant une paire clé-valeur particulière mais n'ayant pas d'autre paire clé-valeur

Votre tentative de requête utilise deux fois la même "clé". Vous ne pouvez pas faire cela dans une structure d'objet car vous "écrasez" essentiellement la valeur de la même clé. Ainsi, la requête réelle considérée n'est que la "seconde" condition pour cette clé.

Donc, si vous voulez avoir plusieurs conditions pour la même clé, utilisez le $and opérateur :

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

Ou puisque toutes les conditions MongoDB sont vraiment des arguments "et" par défaut, vous pouvez également spécifier $eq dans ce cas :

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

Notant ici qu'il n'y a rien de spécial à propos de .aggregate() ici lui-même, car il s'agit simplement de la partie "requête" de base qui effectue le travail de sélection de documents.

Notez également qu'avec une condition "positive" présente (le $eq ) il n'est pas vraiment nécessaire d'utiliser le $exists puisque vous testez déjà qu'au moins cet élément doit correspondre.