MongoDB Grunddatentypen verwenden

MongoDBBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie den Umgang mit verschiedenen grundlegenden Datentypen in MongoDB. Das Lab behandelt praktische Beispiele für das Speichern, Abfragen und Manipulieren von Daten mithilfe von Zahlen, Zeichenketten (Strings), booleschen Werten, Daten (Dates) und ObjectIds. Sie werden praktische Erfahrungen mit gängigen Datenbankoperationen sammeln und die geeigneten Anwendungsfälle für jeden Datentyp verstehen. Am Ende dieses Labs werden Sie eine solide Grundlage für die effektive Datenmodellierung in MongoDB haben.

Arbeiten mit Zahlen und Zeichenketten

In diesem ersten Schritt lernen Sie die gebräuchlichsten Datentypen kennen: Zahlen und Zeichenketten (Strings). Sie starten die MongoDB-Shell, erstellen eine Datenbank und eine Collection und fügen dann Dokumente ein und fragen diese ab, die diese Typen enthalten.

Öffnen Sie zunächst Ihr Terminal und starten Sie die MongoDB-Shell. Diese interaktive Umgebung ermöglicht es Ihnen, Befehle direkt gegen Ihre Datenbank auszuführen.

mongosh

Sobald Sie sich in der Shell befinden, sehen Sie eine > Eingabeaufforderung. Erstellen und wechseln wir zu einer neuen Datenbank namens inventory. In MongoDB wird eine Datenbank automatisch erstellt, wenn Sie dort zum ersten Mal Daten speichern.

use inventory

Erstellen Sie nun eine Collection namens products und fügen Sie ein Dokument ein. Dieses Dokument enthält ein Zeichenkettenfeld (name) und zwei Zahlenfelder (price und stock). MongoDB verwendet BSON (Binary JSON) Typen, wobei Zahlen ganze Zahlen (Integers) oder Gleitkommazahlen (Doubles) sein können.

db.products.insertOne({
    name: "Laptop",
    price: 1200.50,
    stock: 50
})

Sie sollten eine Bestätigungsnachricht mit der ObjectId des neu eingefügten Dokuments sehen.

Beispielausgabe:

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Nachdem das Dokument eingefügt wurde, fragen wir die Collection ab. Finden Sie zunächst Produkte mit einem Preis größer als 1000 unter Verwendung des $gt (greater than) Operators.

db.products.find({ price: { $gt: 1000 } })

Beispielausgabe:

[
  {
    _id: ObjectId("..."),
    name: 'Laptop',
    price: 1200.5,
    stock: 50
  }
]

Führen Sie als Nächstes eine Abfrage durch, um ein Produkt anhand seines exakten Namens zu finden, der ein Zeichenkettenwert ist. Dies ist eine gängige Methode, um bestimmte Elemente abzurufen.

db.products.find({ name: "Laptop" })

Dieser Befehl gibt dasselbe Dokument zurück und zeigt, wie man anhand von Zeichenkettenfeldern abfragt.

Verwendung von Booleans und Null-Werten

In diesem Schritt werden Sie die Datentypen Boolean und Null untersuchen. Booleans eignen sich ideal für Felder, die einen Wahr-oder-Falsch-Zustand darstellen, wie z. B. Flags. Der Null-Typ wird verwendet, um ein Feld ohne Wert darzustellen.

Fahren Sie mit der inventory-Datenbank in der mongosh-Shell fort. Fügen Sie ein neues Produkt mit den Boolean-Feldern inStock und onSale sowie einem Feld discontinuedDate hinzu, das auf null gesetzt ist.

db.products.insertOne({
    name: "Wireless Mouse",
    price: 25,
    inStock: true,
    onSale: false,
    discontinuedDate: null
})

Beispielausgabe:

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Nun haben Sie ein Dokument mit Boolean- und Null-Werten. Sie können diese wie jeden anderen Datentyp abfragen. Suchen wir alle Produkte, die derzeit auf Lager sind, indem wir nach dem Boolean-Wert true abfragen.

db.products.find({ inStock: true })

Beispielausgabe:

[
  {
    _id: ObjectId("..."),
    name: 'Wireless Mouse',
    price: 25,
    inStock: true,
    onSale: false,
    discontinuedDate: null
  }
]

Dieser Befehl ruft Dokumente ab, bei denen das Feld inStock exakt true ist. Als Nächstes suchen wir nach Produkten, die nicht eingestellt wurden, indem wir nach einem null-Wert im Feld discontinuedDate suchen. Beachten Sie, dass in MongoDB eine Abfrage nach null sowohl Dokumente, bei denen das Feld explizit auf null gesetzt ist, als auch Dokumente, bei denen das Feld überhaupt nicht existiert, findet.

db.products.find({ discontinuedDate: null })

Diese Abfrage gibt mehrere Dokumente zurück: die "Wireless Mouse" (bei der discontinuedDate: null ist) und alle anderen Produkte, die überhaupt kein discontinuedDate-Feld haben (wie "Laptop"). Wenn Sie nur Dokumente finden möchten, bei denen das Feld explizit auf null gesetzt ist, müssten Sie ein anderes Abfragemuster verwenden.

Speichern von Daten und Zeitstempeln

Dieser Schritt konzentriert sich auf den Date-Datentyp, der für die Speicherung zeitbasierter Informationen wie Erstellungsdaten, Aktualisierungen oder Ereignisse unerlässlich ist. MongoDB speichert Daten als 64-Bit-Integer, die Millisekunden seit der Unix-Epoche (1. Januar 1970, UTC) darstellen.

Fügen wir ein Dokument mit Datumsfeldern ein. Sie können ein Datumsobjekt für die aktuelle Zeit mit new Date() oder für eine bestimmte Zeit erstellen, indem Sie einen ISO-8601-Datumsstring übergeben.

db.products.insertOne({
    name: "Smartwatch",
    price: 250,
    purchaseDate: new Date("2023-10-26T10:00:00Z"),
    lastUpdated: new Date()
})

Beispielausgabe:

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Nun fragen wir Produkte anhand ihrer Datumsfelder ab. Finden Sie beispielsweise alle Produkte, die am oder nach dem Beginn des Jahres 2023 gekauft wurden. Sie können den Operator $gte (größer als oder gleich) mit einem Date-Objekt verwenden.

db.products.find({
    purchaseDate: { $gte: new Date("2023-01-01") }
})

Beispielausgabe:

[
  {
    _id: ObjectId("..."),
    name: 'Smartwatch',
    price: 250,
    purchaseDate: ISODate('2023-10-26T10:00:00.000Z'),
    lastUpdated: ISODate('...')
  }
]

MongoDB bietet auch Update-Operatoren für Daten. Der Operator $currentDate ist nützlich, um ein Feld auf das aktuelle Serverdatum zu setzen. Aktualisieren wir das Feld lastUpdated für das "Laptop"-Dokument, das Sie zuvor erstellt haben, um zu verfolgen, wann es zuletzt geändert wurde.

db.products.updateOne(
    { name: "Laptop" },
    { $currentDate: { lastUpdated: true } }
)

Beispielausgabe:

{
  "acknowledged": true,
  "insertedId": null,
  "matchedCount": 1,
  "modifiedCount": 1,
  "upsertedCount": 0
}

Diese Operation findet das Dokument mit dem Namen "Laptop" und aktualisiert sein Feld lastUpdated auf den aktuellen Zeitstempel.

ObjectIds und Arrays verstehen

In diesem letzten Schritt lernen Sie zwei wichtige Strukturtypen kennen: ObjectId und Array. Jedes Dokument in MongoDB hat ein eindeutiges Feld _id, das standardmäßig ein ObjectId ist, wenn es nicht angegeben wird. Arrays ermöglichen es Ihnen, Listen von Werten in einem einzigen Feld zu speichern.

Fügen wir zunächst ein Dokument mit einem Array-Feld namens tags ein. Dies ist nützlich zum Speichern mehrerer Kategorien oder Attribute.

db.products.insertOne({
    name: "Mechanical Keyboard",
    price: 75,
    tags: ["gaming", "mechanical", "RGB"]
})

Beispielausgabe:

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Die insertedId ist die ObjectId für dieses neue Dokument. Es handelt sich um einen 12-Byte-Wert, der die Eindeutigkeit garantiert. Sie können ein Dokument anhand seiner _id abfragen. Suchen Sie zuerst das Dokument und speichern Sie seine _id in einer Variablen.

const keyboard = db.products.findOne({ name: "Mechanical Keyboard" })
const keyboardId = keyboard._id

Verwenden Sie nun diese Variable keyboardId, um das Dokument erneut abzurufen. Dies ist der effizienteste Weg, ein einzelnes, spezifisches Dokument abzurufen.

db.products.findOne({ _id: keyboardId })

Als Nächstes arbeiten wir mit dem tags-Array. Sie können Dokumente abfragen, bei denen das Array ein bestimmtes Element enthält. Suchen Sie beispielsweise nach allen Produkten mit dem Tag "gaming":

db.products.find({ tags: "gaming" })

Beispielausgabe:

[
  {
    _id: ObjectId("..."),
    name: 'Mechanical Keyboard',
    price: 75,
    tags: [ 'gaming', 'mechanical', 'RGB' ]
  }
]

Dieser Befehl findet effizient alle Dokumente, bei denen das tags-Array den String "gaming" enthält. Arrays sind ein leistungsstarkes Feature zur Modellierung von Beziehungen innerhalb eines einzelnen Dokuments. Um die MongoDB-Shell zu beenden, geben Sie exit ein oder drücken Sie Ctrl+D.

exit

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie mit den wichtigsten Datentypen in MongoDB arbeiten. Sie haben zunächst Zahlen und Zeichenketten verwendet, um Produktinformationen zu speichern und abzufragen. Anschließend haben Sie Booleans und den Null-Wert für die Darstellung von Status-Flags und fehlenden Daten behandelt. Sie haben auch gelernt, zeitbezogene Daten mit dem Date-Typ und seinen zugehörigen Operatoren zu verarbeiten. Schließlich haben Sie ein Verständnis für ObjectId als eindeutigen Identifikator und den Array-Typ zum Speichern von Listen von Werten gewonnen. Dieses Wissen bietet eine solide Grundlage für die Gestaltung und Interaktion mit MongoDB-Datenbanken für eine Vielzahl von Anwendungen.