Dieses Kapitel führt die logischen Operatoren von MongoDB ein, ähnlich den "und" und "oder" Bedingungen in SQL.

Von MongoDB unterstützte logische Operatoren

Operator Beschreibung
$and Ermittelt Dokumente, die alle angegebenen Bedingungen erfüllen, ähnlich der "und" Bedingung in SQL
$not Führt eine logische NOT-Operation auf dem angegebenen Ausdruck aus
$or Ermittelt Dokumente, die mindestens eine der angegebenen Bedingungen erfüllen, ähnlich der "oder" Bedingung in SQL
$nor Ermittelt Dokumente, die keine der beiden angegebenen Bedingungen erfüllen

$and

Syntax:

{ $and: [ { <Ausdruck1> }, { <Ausdruck2> }, ... , { <AusdruckN> } ] }

Erklärung:

  • ist ein Teilausdruck
  • $and nimmt ein Array mit einer Gruppe von Teilausdrücken, und alle Teilausdrücke müssen erfüllt sein

Beispiel:

db.inventory.find( { $and: [ { qty: { $lt : 10 } }, { qty : { $gt: 50 } }] } )

Äquivalentes SQL:

select * from inventory where qty > 50 and qty < 10

$not

db.inventory.find( { price: { $not: { $gt: 1.99 } } } )

Erklärung:

  • Wenn die Bedingung price > 1.99 ist, dann wäre die NOT-Operation price <= 1.99.
  • Dies bedeutet die Abfrage von Dokumenten, bei denen der Preis kleiner oder gleich 1.99 ist oder das Preisfeld nicht existiert.

Ähnlich zu SQL:

select * from inventory where price <= 1.99

$or

Ähnlich der "oder" Bedingung in SQL Syntax:

{ $or: [ { <Ausdruck1> }, { <Ausdruck2> }, ... , { <AusdruckN> } ] }

Erklärung:

  • ist ein Teilausdruck
  • $or nimmt ein Array mit einer Gruppe von Teilausdrücken, und mindestens ein Teilausdruck muss erfüllt sein

Beispiel:

db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )

Äquivalentes SQL:

select * from inventory where quantity < 20 or price=10

$nor

Logische NOR-Operation Syntax:

{ $nor: [ { <Ausdruck1> }, { <Ausdruck2> }, ... , { <AusdruckN> } ] }

Beispiel:

db.inventory.find( { $nor: [ { price: 1.99 }, { sale: true } ]  } )

Erklärung:

  • price != 1.99 und sale != true, oder
  • price != 1.99 und das sale-Feld ist nicht vorhanden, oder
  • das price-Feld ist nicht vorhanden und sale != true