MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wählen Sie ein Dokument aus, das ein bestimmtes Schlüsselwertpaar, aber kein anderes Schlüsselwertpaar hat

Ihr Abfrageversuch verwendet denselben "Schlüssel" zweimal. In einer Objektstruktur ist dies nicht möglich, da Sie im Wesentlichen den Wert desselben Schlüssels "überschreiben". Die tatsächlich betrachtete Abfrage ist also nur die "zweite" Bedingung für diesen Schlüssel.

Wenn Sie also mehrere Bedingungen für denselben Schlüssel haben möchten, verwenden Sie den $and Betreiber:

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

Da alle MongoDB-Bedingungen standardmäßig „und“-Argumente sind, können Sie auch $eq in diesem Fall:

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

Beachten Sie hier, dass .aggregate() nichts Besonderes ist hier selbst, da es nur der grundlegende "Abfrage"-Teil ist, der die Arbeit der Dokumentenauswahl erledigt.

Beachten Sie auch, dass bei einer "positiven" Bedingung ( der $eq ) ist es nicht wirklich notwendig, den $exists zu verwenden da Sie bereits testen, dass zumindest dieses Element übereinstimmen muss.