📚
Lerndokumentationen
Datenbanken
Datenbanken
  • Willkommen
  • Grundlagen
    • SQL vs. NoSQL
    • NoSQL-Familien
    • CAP-Theorem
    • Vorgehen beim Erstellen
    • ACID - BASE
    • Indizes
  • SQL
    • Struktur
      • Datenbanken und Tabellen
        • Datentypen
        • Erstellen
        • Bearbeiten
        • Löschen
        • Constraints
          • NOT NULL
          • UNIQUE
          • PrimärschlĂĽssel
          • FremdschlĂĽssel
          • CHECK
          • DEFAULT
      • Daten
        • EinfĂĽgen
        • Aktualisieren
        • Löschen
    • Abfragen
      • Auswählen
      • Filtern
      • Operatoren
      • Reihenfolge
      • JOINS
      • Aggregatsfunktionen
        • Gruppieren
        • Filtern
      • Subqueries
    • Transaktionen
    • Datenschutz und Berechtigungen
      • Benutzerverwaltung
      • Rechte
    • Optimierung
  • MongoDB
    • Was ist MongoDB?
    • Struktur
      • Datenbanken und Collections
      • Daten
    • Abfragen
    • Indexing
    • Security
      • Authentifizierung und Autorisierung
      • Auditing
    • Backups
Bereitgestellt von GitBook
Auf dieser Seite
  • Filtern
  • AND-Condition
  • OR-Condition
  • Operatoren
  • Verschachtelte Dokumente
  • Keys selektieren
  • Sortieren
  • Aggregation
  • Konzept
  • Syntax
  • Stages
  • $match
  • $group
  • $sort
  • $project
  • $out
  • $unwind
  • Beispiele
  1. MongoDB

Abfragen

Abfragen können wir mit der find()-Methode machen.

db.inventory.find()
[
  {
    _id: ObjectId("632f57a67042d849480e4755"),
    item: 'journal',
    qty: 25,
    size: { h: 14, w: 21, uom: 'cm' },
    status: 'A',
    tags: [ 'blank', 'red' ]
  },
  {
    _id: ObjectId("632f57a67042d849480e4756"),
    item: 'notebook',
    qty: 50,
    size: { h: 8.5, w: 11, uom: 'in' },
    status: 'A',
    tags: [ 'red', 'blank' ]
  },
  ...
]

Filtern

Wir können der find()-Methode ein Objekt mit Bedingungen mitgeben, um nach bestimmten Kriterien zu filtern.

db.inventory.find( { status: "D" } )
[
  {
    _id: ObjectId("632f57a67042d849480e4757"),
    item: 'paper',
    qty: 100,
    size: { h: 8.5, w: 11, uom: 'in' },
    status: 'D',
    tags: [ 'red', 'blank', 'plain' ]
  },
  ...
]  

AND-Condition

Um eine AND-Condition in unsere Query hinzuzufĂĽgen, mĂĽssen wir unseren Bedingungen mit Kommas trennen.

db.inventory.find( { status: "A", qty: { $lt: 30 } } )
[
  {
    _id: ObjectId("632f57a67042d849480e4755"),
    item: 'journal',
    qty: 25,
    size: { h: 14, w: 21, uom: 'cm' },
    status: 'A',
    tags: [ 'blank', 'red' ]
  }
]

OR-Condition

Um eine OR-Condition in unsere Query hinzuzufĂĽgen, mĂĽssen wir den $or-Operator nutzen.

db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )

Operatoren

Operator
Beschreibung

$eq

Vergleicht Werte, die gleich einem angegebenen Wert sind.

$ne

Vergleicht Werte, die nicht gleich einem angegebenen Wert sind.

$gt

Vergleicht Werte, die grösser als ein angegebener Wert sind.

$gte

Vergleicht Werte, die grösser oder gleich einem angegebenen Wert sind.

$lt

Vergleicht Werte, die kleiner als ein angegebener Wert sind.

$lte

Vergleicht Werte, die kleiner oder gleich einem angegebenen Wert sind.

$in

Vergleicht Werte, die einem der in einem Array angegebenen Werte entsprechen.

$nin

Vergleicht Werte, die keinem der in einem Array angegebenen Werte entsprechen.

Verschachtelte Dokumente

db.inventory.find( { "size.uom": "in" } )

Der SchlĂĽssel muss in "" stehen.

[
  {
    _id: ObjectId("632f57a67042d849480e4756"),
    item: 'notebook',
    qty: 50,
    size: { h: 8.5, w: 11, uom: 'in' },
    status: 'A',
    tags: [ 'red', 'blank' ]
  },
  ...
]

Keys selektieren

Mit einem zweiten Objekt in der find()-Funktion können wir bestimmen, welche Daten zurückgegeben werden sollen und welche nicht.

db.inventory.find( { status: "A" }, { item: 1, status: 1 } )

Verschachtelte Felder mĂĽssen mit "" umschlossen sein.

[
  {
    _id: ObjectId("632f4c977042d849480e474f"),
    item: 'canvas',
    status: 'A'
  },
  {
    _id: ObjectId("632f4cad7042d849480e4750"),
    item: 'journal',
    status: 'A'
  },
  ...
]

Die ID wird standardmässig immer angezeigt. Um die ID zu unterdrücken, muss man explizit angeben, dass man sie nicht möchte.

Sortieren

Um zu sortieren, nutzen wir die sort()-Funktion. Dabei steht 1 fĂĽr Ascending und -1 fĂĽr Descending.

db.inventory.find().sort( { "qty": 1} )

NatĂĽrlich kann auch auf mehreren Sortierebenen sortiert werden.

db.inventory.find().sort( { "status": 1, "item": 1 } )

Aggregation

Aggregation ist eine Methode um eine grosse Anzahl verschiedenener Dokumente einer Collection zu bearbeiten und auszuwerten. Eine Aggregation durchläuft eine oder mehrere Stages (Einzeloperationen), mit welchen gefiltert, sortiert, groupiert oder modifiziert werden kann. Der häufigste Anwendungsfall ist die Berechnung von Summen, Durchschnitten, Minium, oder Maximum.

Konzept

  • Jede Aggregation Pipeline besteht aus mehreren Stages, welche die Dokumente bearbeiten. Die Stages sind ein einem Array [..] angeordnet

  • Jede Stage bearbeitet ihre Inputdokumente. Zum Beispiel kann eine Stage Filteroperationen ausfĂĽhren oder Dokumente gruppieren und bestimmte Werte berechnen.

  • Die Output Dokumente einer Stage dienen als Input Dokumente fĂĽr die nächste Stage. Eine Aggregation Pipeline gleicht daher einer klassischen Unix Pipeline.

  • Eine Aggregation Pipeline kann Resultate fĂĽr Gruppen von Dokumenten zurĂĽckliefern, z.B. Anzahl, Summe, Durchschnitt, Minimum und Maximum.

Syntax

db.<collection>.aggregate([ { <stage> }, ... ])

Stages

$match

Filtert Dokumente nach den gegebenen Kriterien.

$match: {
  $or: [ 
   { score: { $gt: 70, $lt: 90 } }, 
   { views: { $gte: 1000 } } 
  ] 
}

$group

Gruppiert die Dokumente nach einem Datenfeld . Folgende Aggregationsfunktionen stehen zur VerfĂĽgung:

  • $avg

  • $sum

  • $count

  • $min

  • $max

  • $first

  • $last

  • ...

$group: { 
  _id: "$name", 
  totalQuantity: { $sum: "$quantity" } 
}

$sort

Sortiert die Dokumente nach dem angegebenen Feld.

$sort : { 
  age : -1, 
  posts: 1 
}

$project

FĂĽgt neue Felder zu den Dokumenten hinzu oder unterdrĂĽckt sie:

  • <field>: 1 - ĂĽbernimmt das angegebene Feld

  • <field>: 0 - unterdrĂĽckt das angegebene Feld

  • <field>: <expression> - fĂĽgt ein Feld hinzu oder ersetzt es

$project : { 
  size: 1, 
  _id: 0, 
  name: { $toUpper: "$_id" } 
}

$out

Schreibt Dokumente in eine Collection.

$out: "authors"

$unwind

Dekonstruiert ein Array-Feld und erstellt fĂĽr jedes Element im Array ein separates Dokument.

$unwind: "$copies"

Beispiele

FĂĽr wie viele CHF hat jeder Kunde mit dem Status A eingekauft?

db.orders.aggregate([
  {
    $match: { status: "A" }
  },
  {
    $group: { _id: "$cust_id", order_totals: { $sum: "$amount" } }
  }
])

Wie viele Pizzen mit der Grösse Medium wurden von jeder Sorte bestellt?

db.orders.aggregate([
  {
    $match: { size: "medium" }
  },
  {
    $group: { _id: "$name", totalQuantity: { $sum: "$quantity" } }
  }
])

FĂĽr wie viele Franken wurde zwischen dem 30. Januar 2020 und dem 30. Januar 2020 pro Tag bestellt?

db.orders.aggregate([
  {
    $match: {
      "date": { $gte: new ISODate( "2020-01-30" ), $lt: new ISODate( "2022-01-30" ) }
    }
  },
  {
    $group: {
      _id: { $dateToString: { format: "%Y-%m-%d", date: "$date" } },
      totalOrderValue: { $sum: { $multiply: [ "$price", "$quantity" ] } },
    }
  },
  {
    $sort: { totalOrderValue: -1 }
  }
])
VorherigeDatenNächsteIndexing

Zuletzt aktualisiert vor 29 Tagen