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
Du musst angemeldet sein, um einen Kommentar abzugeben.
in der Dokumentation nicht sagen, dass dies unmöglich ist. Es sagt nur,
dies bedeutet, dass das funktionieren wird :
aber das stört nicht, denn es ist ein implizite
$and
mit zwei$or
online testen: mongoplayground.net/p/gL_0gKzGA-u
Hier ist ein arbeiten mit einem impliziten
$and
:Ich denke, das problem, dem Sie gegenüberstehen, ist, dass es kein Dokument, passend zu Ihrem Wunsch in Ihrer Sammlung
InformationsquelleAutor felix