MongoDB-Abfrage mit einer ODER-Bedingung
-
der
$or
-Operator in MongoDB -
Klauseln und Indizes für den Operator
$or
-
Einzelabfragen und der Operator
$or
-
der
$or
-Operator VS der$in
-Operator -
Fehlerbehandlung mit dem Operator
$or
In diesem Tutorial-Artikel erfahren Sie, wie Sie den Operator $or
mit einer MongoDB-Abfrage verwenden.
MongoDB stellt dem Benutzer verschiedene Arten von logischen Abfrageoperatoren zur Verfügung, und der Operator $or
ist einer davon. Dieser Operator führt logische ODER
-Operationen auf dem Array von zwei oder mehr Ausdrücken aus und wählt oder ruft nur die Dokumente ab, die mit mindestens einem der angegebenen Ausdrücke im Array übereinstimmen.
der $or
-Operator in MongoDB
Sie können den Operator $or
in Methoden wie find()
, update()
usw. verwenden.
- Sie können diesen Operator auch mit Textabfragen,
GeoSpatial
-Abfragen und Sortieroperationen verwenden. - Wenn MongoDB die Klauseln im
$or
-Ausdruck auswertet, führt es einen Erfassungsscan durch. Wenn Indizes alle Klauseln im$or
-Ausdruck unterstützen, führt MongoDB Index-Scans durch. - Sie können die
$or
-Operation auch verschachteln.
Der Operator $or
wählt Dokumente aus, die mindestens einem der Ausdrücke entsprechen, indem er eine logische ODER
-Operation an einem Array ausführt, das aus zwei oder mehr Ausdrücken besteht.
Syntax:
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
Anfrage:
db.inventory.find( { $or: [ { quantity: { $lt: 50 } }, { price: 20 } ] } )
Alle Dokumente werden bei dieser Abfrage in der Inventarsammlung mit einem Feldwert Menge
von weniger als 50
oder einem Feldwert Preis
von weniger als 20
zurückgegeben.
Klauseln und Indizes für den Operator $or
MongoDB führt entweder einen Sammlungsscan oder einen Indexscan durch, wenn die Klauseln im $or
-Ausdruck ausgewertet werden. Wenn Indizes alle Klauseln unterstützen, führt MongoDB Indexscans durch.
Daher müssen alle Klauseln im $or
-Ausdruck von Indizes unterstützt werden, damit MongoDB die Anweisung auswerten kann. MongoDB führt einen Sammlungsscan durch, wenn dies nicht der Fall ist.
Jede Klausel einer $or
-Abfrage kann ihren Index verwenden, wenn Indizes mit $or
-Abfragen verwendet werden.
Anfrage:
db.inventory.find( { $or: [ { quantity: { $lt: 50 } }, { price: 20 } ] } )
Anstelle eines zusammengesetzten Index würden Sie einen Index für die Menge und einen weiteren für den Preis einrichten, um diese Abfrage zu verarbeiten.
Anfrage:
db.inventory.createIndex( { quantity: 1 } )
db.inventory.createIndex( { price: 1 } )
Um $or
-Klauseln zu aktivieren, kann MongoDB beliebige Indizes außer dem geoHaystack
-Index verwenden.
Einzelabfragen und der Operator $or
-
Die
$text
-Abfragen und der$or
-Operator.Ein Index muss alle Klauseln im Array
$or
unterstützen, wenn$or
eine$text
-Abfrage enthält. Eine$text
-Abfrage muss einen Index verwenden, und$or
kann Indizes nur verwenden, wenn alle seine Klauseln von den Indizes unterstützt werden.Wenn die Abfrage
$text
keinen Index verwenden kann, erzeugt die Abfrage einen Fehler. -
GeoSpatial
-Abfragen und der$or
-Operator.Mit Ausnahme der Near-Klausel (die
$nearSphere
und$near
enthält) erlaubt$or
geographische Klauseln. Es darf kein Near-Satz mit einem anderen Satz in$or
stehen. -
Sortieroperationen und der Operator
$or
.MongoDB kann jetzt Indizes verwenden, die die
$or
-Klauseln unterstützen, wenn$or
-Abfragen mit einemsort()
ausgeführt werden. Die Indizes wurden in früheren Versionen von MongoDB nicht verwendet.
der $or
-Operator VS der $in
-Operator
Anstatt den Operator $or
mit Ausdrücken zu verwenden, die Gleichheitsprüfungen für den Wert desselben Felds sind, verwenden Sie den Operator $in
. Verwenden Sie den Operator $in
, um alle Dokumente in der Sammlung Inventar
auszuwählen, bei denen der Feldwert Menge
40
oder 1000
ist.
Anfrage:
db.inventory.find ( { quantity: { $in: [40, 1000] } } )
Außerdem können Sie den Operator $or
verschachteln.
Fehlerbehandlung mit dem Operator $or
Der Operator $or
behandelt Fehler auf folgende Weise, um der Abfragemaschine zu helfen, Abfragen zu verbessern.
- Wenn dem Operator
$or
ein beliebiger Ausdruck übergeben wird, führt dies zu einem Fehler, wenn er separat ausgewertet wird. Der Operator$or
, der den Ausdruck enthält, kann einen Fehler verursachen, dies wird jedoch nicht garantiert. - Selbst wenn der erste an
$or
übergebene Ausdrucktrue,
ergibt, kann ein danach übermittelter Ausdruck einen Fehler auslösen.
Wenn beispielsweise $x
gleich 0,
ist, gibt die folgende Abfrage immer einen Fehler zurück.
Anfrage:
db.example.find( {
$expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] }
} )
Angenommen, es gibt ein Dokument, in dem $x
den Wert 0
hat, was bedeutet, dass mehrere Ausdrücke an $or
übergeben werden. Das folgende Beispiel kann zu einem Fehler führen.
Anfrage:
db.example.find( {
$or: [
{ x: { $eq: 0 } },
{ $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } }
]
} )
In diesem MongoDB-Tutorial lernen Sie, wie Sie den Operator $or
mit einer MongoDB-Abfrage verwenden, um logische ODER
-Operationen auf dem Array auszuführen, das aus zwei oder mehr Ausdrücken besteht, und auch nur die Dokumente auswählen oder abrufen, die mit mindestens einem übereinstimmen der im Array angegebenen Ausdrücke.