Abfrage mit mehreren Bedingungen in MongoDB
-
$or
-Operator in MongoDB -
Finden Sie mehrere Bedingungen mit dem Operator
$or
-
$and
-Operator in MongoDB -
Finden Sie mehrere Bedingungen mit dem Operator
$and
In diesem Artikel erfahren Sie, wie Sie Abfragen mit mehreren Bedingungen unter Verwendung mehrerer Dokumente in MongoDB ausführen. Die Operatoren $and
und $or
werden kurz mit Beispielen erklärt.
MongoDB stellt dem Benutzer verschiedene logische Abfrageoperatoren zur Verfügung, die Operatoren $or
und $and
sind eins. Aber schauen wir uns zuerst das Inhaltsverzeichnis dieses Artikels an.
$or
-Operator- Finden Sie mehrere Bedingungen mit dem Operator
$or
$and
-Operator- Finden Sie mehrere Bedingungen mit dem Operator
$and
$or
-Operator in MongoDB
Je nach Bedarf können Sie diesen Operator 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. Oder, wenn Indizes alle Klauseln im$or
-Ausdruck unterstützen, führt MongoDB Index-Scans durch. - Sie können die
$or
-Operation auch verschachteln.
Durch Ausführen einer logischen ODER
-Operation auf einem Array von zwei oder mehr Ausdrücken
wählt der ODER
-Operator Dokumente aus, die mindestens einen der Ausdrücke
erfüllen. Der Operator $or
hat die folgende Syntax.
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
Betrachten Sie das folgende Beispiel.
db.inventory.find( { $or: [ { quantity: { $lt: 51 } }, { price: 20 } ] } )
Bei dieser Abfrage werden alle Dokumente in der Bestandssammlung mit einem Feldwert Menge
von weniger als 51
oder einem Feldwert Preis
von weniger als 20
zurückgegeben.
Lassen Sie uns zunächst das Verhalten des or
-Operators in MongoDB besprechen.
Klauseln und Indizes für den Operator $or
Beim Auswerten aller Klauseln im $or
-Ausdruck führt MongoDB entweder einen Sammlungsscan oder einen Indexscan durch. MongoDB führt Index-Scans durch, wenn die Indizes alle Klauseln unterstützen.
Damit MongoDB die Anweisung analysieren kann, müssen daher alle Klauseln im $or
-Ausdruck durch Indizes unterstützt werden. Wenn dies nicht der Fall ist, führt MongoDB einen Sammlungsscan durch.
Jede Klausel der $or
-Abfrage kann ihren Index verwenden, wenn Indizes mit $or
-Abfragen verwendet werden. Sehen Sie sich das folgende Beispiel unten an.
db.inventory.find( { $or: [ { quantity: { $lt: 51 } }, { price: 20 } ] } )
Anstelle eines zusammengesetzten Index würden Sie einen Index für Menge
und einen anderen für den Preis
erstellen, um diese Abfrage zu bearbeiten.
db.inventory.createIndex( { quantity: 1 } )
db.inventory.createIndex( { price: 1 } )
Um die $or
-Klauseln zu aktivieren, kann MongoDB beliebige Indizes außer dem geoHaystack
-Index verwenden.
text
-Abfragen und der $or
-Operator
Wenn $or
eine $text
-Abfrage enthält, muss ein Index alle Klauseln im $or
-Array unterstützen. Folglich muss eine $text
-Abfrage einen Index verwenden, und eine $or
-Abfrage darf die Indizes nur verwenden, wenn alle ihre Klauseln unterstützt werden.
Wenn die Abfrage $text
keinen Index verwendet, gibt die Abfrage einen Fehler zurück.
GeoSpatial
-Abfragen und der $or
-Operator
$or
lässt geografische Klauseln zu, mit Ausnahme der near
-Klausel (die $nearSphere
und $near
enthält). Es darf keine Relativklausel in $or
mit einer anderen Klausel stehen.
Sortieroperationen und der Operator $or
Bei der Ausführung von $or
-Abfragen mit sort()
kann MongoDB jetzt Indizes verwenden, die die $or
-Klauseln unterstützen. In früheren Versionen von MongoDB wurden die Indizes nicht verwendet.
$or
VS $in
Verwenden Sie den Operator $in
anstelle des Operators $or
mit Ausdrücken
, die Gleichheitstests für den Wert desselben Felds sind.
Verwenden Sie beispielsweise den Operator $in
, um alle Dokumente in der Sammlung Inventar
auszuwählen, bei denen der Feldwert Menge
entweder 40
oder 1000
ist.
db.inventory.find ( { quantity: { $in: [40, 1000] } } )
Finden Sie mehrere Bedingungen mit dem Operator $or
Der oder
-Operator in MongoDB wird verwendet, um nur Dokumente auszuwählen oder abzurufen, die mit mindestens einem der bereitgestellten Ausdrücke übereinstimmen.
- Sie können diesen Operator gemäß den Anforderungen auch in einer Methode wie
find()
,update()
usw. verwenden. - Sie können diesen Operator auch mit Textabfragen und Sortieroperationen verwenden.
- Sie können die
$or
-Operation auch verschachteln.
Sehen wir uns ein Beispiel an, um die Funktionsweise des Operators $or
zu verstehen.
Beispiel:
Lassen Sie uns eine Sammlung erstellen, die die folgenden Dokumente enthält.
db={
"students": [
{
id: 1,
name: "Ali",
Age: 24,
language: "JavaScript",
status: "inactive",
score: 82
},
{
id: 2,
name: "Haris",
Age: 35,
language: "Python",
status: "inactive",
score: 87
},
{
id: 3,
team: "Hamza",
Age: 27,
status: "active",
language: "Python",
score: 84
}
]
}
Zeigen Sie alle Dokumente einer Sammlung mit der Methode find()
an.
db.students.find();
Das Folgende ist die MongoDB-Abfrage mit dem Operator $or
.
db.students.find({
$or: [
{
Age: {
$lte: 24
}
},
{
score: {
$lt: 80
}
},
{
status: "Inactive"
}
]
})
Dies erzeugt die folgende Ausgabe.
$and
-Operator in MongoDB
$and
führt eine logische AND
-Operation mit einem Array aus einem oder mehreren Ausdrücken durch (expression1>
, expression2>
usw.) und wählt die Dokumente aus, die alle Ausdrücke erfüllen.
Verhalten:
$and
behandelt Fehler wie folgt, um die Abfragemaschine bei der Verbesserung von Abfragen zu unterstützen.
- Wenn ein für
$and
bereitgestellter Ausdruck zu einem Fehler führen würde, wenn er allein ausgewertet würde, kann das$and
, das den Ausdruck enthält, zu einem Fehler führen, obwohl dies nicht garantiert wird. - Ein nach dem ersten an
$and
gelieferter Ausdruck kann einen Fehler verursachen, selbst wenn der erste Ausdruckfalse
ergibt.
Syntax:
Die Syntax, die bei der Verwendung des and
-Operators verwendet wird, ist die folgende.
{ $and: [{ <expression1> },{ <expression2> }, ... ,{ <expressionN> }] }
Die folgende Abfrage wird beispielsweise immer einen Fehler erzeugen, wenn $x
gleich 0
ist.
db.example.find( {
$expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] }
} )
Die folgende Abfrage, die mehrere Ausdrücke enthält, die an $and
geliefert werden, kann einen Fehler erzeugen, wenn es ein Dokument gibt, in dem $x
0
ist.
db.example.find( {
$and: [
{ x: { $ne: 0 } },
{ $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } }
]
} )
Finden Sie mehrere Bedingungen mit dem Operator $and
Sie können den Operator $and
in MongoDB verwenden, um mehrere Kriterien anzuwenden. Zuerst werden wir alle Papiere auswählen, die alle Bedingungsphrasen erfüllen, indem wir die Operation $and
verwenden.
- Sie können diesen Operator je nach Anforderung in Methoden wie
find()
,update()
usw. verwenden. - Sie können diesen Operator auch mit Textabfragen und Sortieroperationen verwenden.
Lassen Sie es uns anhand eines Beispiels verstehen.
Die folgenden Datensätze werden in die Sammlung Studenten
eingefügt.
db={
"students": [
{
id: 1,
name: "Ali",
Age: 24,
language: "JavaScript",
status: "inactive",
score: 82
},
{
id: 2,
name: "Haris",
Age: 35,
language: "Python",
status: "inactive",
score: 87
},
{
id: 3,
team: "Hamza",
Age: 27,
status: "active",
language: "Python",
score: 84
}
]
}
Jetzt wenden Sie mehrere Bedingungen mit dem Operator $and
an und finden die Dokumente.
db.students.find({
$and: [
{
"language": "Python"
},
{
"Age": 35
}
]
})
Hier wird die Operation $and
angewendet, um die Dokumente zu finden, bei denen Sprache
Python
und Alter
35
ist.
Sehen Sie sich die Funktionsweise des obigen Codes in MongoDB aus diesem Screenshot an.
Sie haben das Ergebnis gemäß der angegebenen Bedingung erfolgreich erhalten. Dann können Sie den Operator $and
verwenden und die Dokumente entsprechend der Bedingung abrufen.
In diesem Artikel wird die Abfrage mit mehreren Bedingungen unter Verwendung mehrerer Dokumente in MongoDB unter Verwendung der Operatoren $and
und $or
ausführlich erläutert.