Abfrage MongoDB mit $und Mehrere $oder

Wie gesagt in der Dokumentation, ist dies nicht möglich.


UND Abfragen Mit Mehreren Ausdrücken mit der Angabe des Gleichen Betreiber

Betrachten Sie das folgende Beispiel:

db.inventory.find( {
    $and : [
        { $or : [ { price : 0.99 }, { price : 1.99 } ] },
        { $or : [ { sale : true }, { qty : { $lt : 20 } } ] }
    ]
} )

Dieser Abfrage wählen Sie alle Dokumente, in denen:

Feld Preis Wert 0.99 oder 1.99, und
der Verkauf Feldwert ist gleich true oder das Feld qty-Wert kleiner als 20 ist.

Diese Abfrage nicht erstellt werden kann unter Verwendung einer impliziten UND-Betrieb, da es verwendet $oder Betreiber mehr als einmal.


Was ist eine Abhilfe, um die Abfrage so etwas? Diese Abfrage gibt keine Ergebnisse zurück auf MongoDB 3.2. Ich habe getestet die $oder Blöcke getrennt und Sie arbeiten gut, aber nicht wenn Sie verpackt sind in $und block. Ich nahm an, ich wusste nicht, Lesen Sie die Dokumentation falsch, dass dies nicht funktionieren soll. Die einzige alternative, die ich habe ist, schieben Sie die Daten in ElasticSearch und Abfrage gibt es anstelle, aber das ist auch nur ein workaround.

{
    "$and": [
        {
            "$or": [
                {
                    "title": {
                        "$regex": "^.*html .*$",
                        "$options": "i"
                    }
                },
                {
                    "keywords": {
                        "$regex": "^.*html .*$",
                        "$options": "i"
                    }
                }
            ]
        },
        {
            "$or": [
                {
                    "public": true
                },
                {
                    "domain": "cozybid"
                }
            ]
        }
    ]
}

InformationsquelleAutor juminoz | 2016-11-02

Schreibe einen Kommentar