Sie sind auf Seite 1von 16

MongoDB Abfragen

H. Moritsch 2022-04

SPENGERGASSE

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 1 / 16


Collection inventory

Datenbank wählen: use exampledb

Collection erzeugen

db.inventory.insertMany([
{ _id: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" },
status: "A" },
{ _id: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" },
status: "A" },
{ _id: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" },
status: "D" },
{ _id: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" },
status: "D" },
{ _id: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" },
status: "A" }
]);

Collection entfernen

db.inventory.drop();

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 2 / 16


Abfragen

Leeres Filterdokument: Ausgabe aller Dokumente

db.inventory.find({ })

Es werden max. 20 Dokumente angezeigt – die nächsten 20 durch Eingabe von it

Prettyprint

db.inventory.find({ }).pretty()

Anzahl der ausgegebenen Dokumente beschränken

db.inventory.find({ }).limit(3)
db.inventory.find({ }).skip(2)
db.inventory.find({ }).skip(2).limit(2)

Anzahl der gefundenen Dokumente ausgeben

db.inventory.count({ })

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 3 / 16


Einfache Abfragen

Ausgabe auf bestimmte Felder einschränken: Wert 1

db.inventory.find({ }, { _id: 1, qty: 1) })

Feld hat bestimmten Wert

db.inventory.find({ status: "D" })

Feld hat einen Wert aus einer Menge

db.inventory.find({ status: { $in: [ "A", "D" ] } })

Wert eines Feldes ist numerisch kleiner

db.inventory.find({ qty: { $lt: 80 } })

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 4 / 16


Logische Operatoren

UND: durch Aneinanderreihung

{ status: "A", qty: { $lt: 80 } }

ODER

{ $or: [ { status: "D" }, { qty: { $lt: 30 } } ] }

UND/ODER kombiniert (mit regulärem Ausdruck)

{ status: "A", $or: [ { qty: { $lt: 30 } }, { _id: /^p/ } ] }

Negation

{ qty: { $not: { $gt: 50 } } }

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 5 / 16


Abfragen auf eingebettete Dokumente

Exakte Übereinstimmung mit eingebettetem Dokument

{ size: { h: 14, w: 21, uom: "cm" } }

Feld des eingebetteten Dokuments hat bestimmten Wert (Punkt-Operator)

{ "size.uom": "in" }
Punkt-Operator verlangt Anführungszeichen!

Vergleich mit Feld des eingebetteten Dokuments

{ "size.h": { $lt: 15 } }

UND mit Feld des Hauptdokuments

{ "size.h": { $lt: 15 }, "size.uom": "in", status: "D" }

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 6 / 16


Arrays

Collection erzeugen

db.inventory.insertMany([
{ _id: "journal", qty: 25, tags: ["blank", "red"],
dim_cm: [ 14, 21 ] },
{ _id: "notebook", qty: 50, tags: ["red", "blank"],
dim_cm: [ 14, 21 ] },
{ _id: "paper", qty: 100, tags: ["red", "blank", "plain"],
dim_cm: [ 14, 21 ] },
{ _id: "planner", qty: 75, tags: ["blank", "red"],
dim_cm: [ 22.85, 30 ] },
{ _id: "postcard", qty: 45, tags: ["blue"],
dim_cm: [ 10, 15.25 ] }
]);

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 7 / 16


Abfragen auf Arrays (1)

Exakte Übereinstimmung mit ganzem Array (inkl. Reihenfolge der Elemente)

{ tags: ["red", "blank"] }

Alle genannten Elemente müssen enthalten sein, in beliebiger Reihenfolge

{ tags: { $all: ["red", "blank"] } }

Bestimmtes Element muss enthalten sein

{ tags: "red" }

Für mindestens ein Element muss eine Bedingung erfüllt sein

{ dim_cm: { $gt: 25 } }

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 8 / 16


Abfragen auf Arrays (2)

Mehrere Bedingungen müssen – jedoch für beliebige Elemente – erfüllt sein

{ dim_cm: { $gt: 15, $lt: 20 } }

Für mindestens ein Element müssen mehrere Bedingungen (gleichzeitig) erfüllt sein

{ dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } }

Vergleich mit Arrayelement (Punkt-Operator), Index beginnt bei 0

{ "dim_cm.1": { $gt: 25 } }
Punkt-Operator verlangt Anführungszeichen!

Array muss bestimmte Länge haben

{ tags: { $size: 3 } }
Nicht möglich: Kombination mit Vergleichsoperator { $size: { $gt: 1} }

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 9 / 16


Abfragen auf Arrays (3)

Für alle Elemente müssen mehrere Bedingungen (gleichzeitig) erfüllt sein

{ dim_cm: { $not: { $elemMatch: { $not: { $gt:12 , $lt:30 } } } } }


Es darf nicht sein, dass mindestens ein Element nicht beide Bedingungen erfüllt. Bzw.
§ Es darf nicht sein, dass irgendein Element nicht beide Bedingungen erfüllt.
§ Es darf kein Element geben, das nicht beide Bedingungen erfüllt.
Entspricht: Für alle Elemente müssen beide Bedingungen erfüllt sein.
Prädikatenlogik: @xF x ” Dx F x (F x bedeutet: x erfüllt beide Bedingungen)

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 10 / 16


Arrays von eingebetteten Dokumenten

Collection erzeugen

db.inventory.insertMany( [
{ _id: "journal", instock: [ { warehouse: "A", qty: 5 },
{ warehouse: "C", qty: 15 } ] },
{ _id: "notebook", instock: [ { warehouse: "C", qty: 5 }
] },
{ _id: "paper", instock: [ { warehouse: "A", qty: 60 },
{ warehouse: "B", qty: 15 } ] },
{ _id: "planner", instock: [ { warehouse: "A", qty: 40 },
{ warehouse: "B", qty: 5 } ] },
{ _id: "postcard", instock: [ { warehouse: "B", qty: 15 },
{ warehouse: "C", qty: 35 } ] }
]);

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 11 / 16


Abfragen auf Arrays von eingebetteten Dokumenten (1)

Bestimmtes Element (= eingebettetes Dokument) muss enthalten sein

{ instock: { warehouse: "A", qty: 5 } }

Vergleich mit Arrayelement (= eingebettetes Dokument)

{ "instock.1": { warehouse: "B", qty: 15 } }

Für mindestens ein Element muss eine Bedingung – für ein Feld – erfüllt sein

{ "instock.qty": { $lte: 10 } }

Für ein bestimmtes Element muss eine Bedingung – für ein Feld – erfüllt sein

{ "instock.0.qty": { $lte: 10 } }

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 12 / 16


Abfragen auf Arrays von eingebetteten Dokumenten (2)

Mehrere Bedingungen müssen – für beliebige Elemente – erfüllt sein

{ "instock.qty": 5, "instock.warehouse": "A" }

W. o., für ein bestimmtes Feld

{ "instock.qty": { $gt: 20, $lte: 20 } }

Für mindestens ein Element müssen mehrere Bedingungen erfüllt sein

{ instock: { $elemMatch: { qty: 5, warehouse: "A" } } }

W. o., für ein bestimmtes Feld

{ instock: { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } }

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 13 / 16


Existenz

Collection

db.words.insertMany([
{ _id: 1, word: "hello"},
{ _id: 2, word: null },
{ _id: 3 },
])

Feld ist nicht eingetragen

{ word : { $exists: false } }

Feld ist eingetragen – inkl. null ist eingetragen

{ word : { $exists: true } }

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 14 / 16


null-Werte

null ist eingetragen oder Feld ist nicht eingetragen

{ word: null }

null ist eingetragen

{ $and: [ { word: { $exists: true } }, { word: null} ] }

null ist eingetragen, mittels Abfrage auf Typ Null


https://docs.mongodb.com/manual/reference/bson-types

{ word : { $type: "null" } }

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 15 / 16


Links

Getting Started (MongoDB Web Shell)


https://docs.mongodb.com/manual/tutorial/getting-started

Dokumente abfragen
https://docs.mongodb.com/manual/tutorial/query-documents

Operatoren für Abfragen


https://docs.mongodb.com/manual/reference/operator/query

JSON/BSON-Format
https://docs.mongodb.com/manual/core/document

MongoDB Shell
https://docs.mongodb.com/manual/mongo
Download: https://www.mongodb.com/try/download/shell
MongoDB Compass
https://www.mongodb.com/products/compass

H. Moritsch 2022-04 MongoDB Abfragen SPENGERGASSE 16 / 16

Das könnte Ihnen auch gefallen