Abfrage mit mehreren Bedingungen in MongoDB

Tahseen Tauseef 20 Juni 2023
  1. $or-Operator in MongoDB
  2. Finden Sie mehrere Bedingungen mit dem Operator $or
  3. $and-Operator in MongoDB
  4. Finden Sie mehrere Bedingungen mit dem Operator $and
Abfrage mit mehreren Bedingungen in MongoDB

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.

  1. $or-Operator
  2. Finden Sie mehrere Bedingungen mit dem Operator $or
  3. $and-Operator
  4. 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.

  1. Sie können diesen Operator auch mit Textabfragen, GeoSpatial-Abfragen und Sortieroperationen verwenden.
  2. 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.
  3. 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.

  1. Sie können diesen Operator gemäß den Anforderungen auch in einer Methode wie find(), update() usw. verwenden.
  2. Sie können diesen Operator auch mit Textabfragen und Sortieroperationen verwenden.
  3. 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.

Benutzer oder Betreiber

$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.

  1. 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.
  2. Ein nach dem ersten an $and gelieferter Ausdruck kann einen Fehler verursachen, selbst wenn der erste Ausdruck false 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.

  1. Sie können diesen Operator je nach Anforderung in Methoden wie find(), update() usw. verwenden.
  2. 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.

Einsatz und Betreiber

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.

Verwandter Artikel - MongoDB Query