Query MongoDB mit $ und und Multiple $ oder

Wie im @ angegebDokumentatio, das ist nicht möglich

AND-Abfragen mit mehreren Ausdrücken unter Angabe desselben Operators

Betrachten Sie das folgende Beispiel:

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

Diese Abfrage gibt alle zurück. Wählen Sie alle Dokumente aus, bei denen:

der Preisfeldwert ist gleich 0,99 oder 1,99 und der Verkaufsfeldwert ist gleich wahr oder der Mengenfeldwert ist kleiner als 20.

Diese Abfrage kann nicht mit einer impliziten AND-Operation erstellt werden, da der Operator $ oder mehrmals verwendet wird.

Was ist eine Problemumgehung, um so etwas abzufragen? Diese Abfrage gibt in MongoDB 3.2 keine Ergebnisse zurück. Ich habe die $ oder Blöcke separat getestet und sie funktionieren einwandfrei, aber nicht, wenn sie in $ und Block eingeschlossen sind. Ich ging davon aus, dass ich die Dokumentation nicht falsch gelesen habe, dass dies nicht funktionieren soll. Die einzige Alternative, die ich habe, besteht darin, die Daten an ElasticSearch zu senden und dort abzufragen, aber das ist auch nur eine Problemumgehung.

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage