MongoDB-Abfrage mit einer ODER-Bedingung

Tahseen Tauseef 20 Juni 2023
  1. der $or-Operator in MongoDB
  2. Klauseln und Indizes für den Operator $or
  3. Einzelabfragen und der Operator $or
  4. der $or-Operator VS der $in-Operator
  5. Fehlerbehandlung mit dem Operator $or
MongoDB-Abfrage mit einer ODER-Bedingung

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.

  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. Wenn Indizes alle Klauseln im $or-Ausdruck unterstützen, führt MongoDB Index-Scans durch.
  3. 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

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

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

  3. Sortieroperationen und der Operator $or.

    MongoDB kann jetzt Indizes verwenden, die die $or-Klauseln unterstützen, wenn $or-Abfragen mit einem sort() 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.

  1. 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.
  2. Selbst wenn der erste an $or übergebene Ausdruck true, 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.

Verwandter Artikel - MongoDB Operator