MongoDB BSON-Leitfaden

1. Einleitung

In diesem Tutorial werden wir uns mit BSON befassen und wie wir es verwenden können, um mit MongoDB zu interagieren.

Eine ausführliche Beschreibung von MongoDB und all seinen Funktionen würde den Rahmen dieses Artikels sprengen. Es ist jedoch hilfreich, einige Schlüsselkonzepte zu verstehen.

MongoDB ist eine verteilte NoSQL-Dokumentenspeicher-Engine. Dokumente werden als BSON-Daten gespeichert und zu Sammlungen zusammengefasst. Dokumente in einer Sammlung sind analog zu Zeilen in einer relationalen Datenbanktabelle .

Weitere Informationen finden Sie im einführenden MongoDB-Artikel.

2. Was ist BSON ?

BSON steht für Binary JSON . Es ist ein Protokoll zur binären Serialisierung von JSON-ähnlichen Daten.

JSON ist ein Datenaustauschformat, das in modernen Webdiensten beliebt ist. Es bietet eine flexible Möglichkeit, komplexe Datenstrukturen darzustellen.

BSON bietet gegenüber der Verwendung von normalem JSON mehrere Vorteile:

  • Kompakt: In den meisten Fällen benötigt das Speichern einer BSON-Struktur weniger Speicherplatz als das JSON-Äquivalent
  • Datentypen: BSON bietet zusätzliche Datentypen, die in regulärem JSON nicht enthalten sind, z. B. Date und BinData

Einer der Hauptvorteile der Verwendung von BSON ist, dass es leicht zu durchqueren ist . BSON-Dokumente enthalten zusätzliche Metadaten, die eine einfache Bearbeitung der Felder eines Dokuments ermöglichen, ohne das gesamte Dokument selbst lesen zu müssen.

3. Der MongoDB-Treiber

Nachdem wir nun ein grundlegendes Verständnis von BSON und MongoDB haben, schauen wir uns an, wie wir sie zusammen verwenden können. Wir konzentrieren sich auf die wichtigsten Maßnahmen aus dem CRUD Akronym ( C reate, R ead, U pdate, D elete).

MongoDB bietet Softwaretreiber für die meisten modernen Programmiersprachen. Die Treiber basieren auf der BSON-Bibliothek. Dies bedeutet, dass wir beim Erstellen von Abfragen direkt mit der BSON-API arbeiten. Weitere Informationen finden Sie in unserem Handbuch zur Abfragesprache MongoDB.

In diesem Abschnitt wird erläutert, wie Sie mithilfe des Treibers eine Verbindung zu einem Cluster herstellen und mithilfe der BSON-API verschiedene Arten von Abfragen ausführen. Beachten Sie, dass der MongoDB-Treiber eine Filterklasse bereitstellt , mit deren Hilfe wir kompakteren Code schreiben können. In diesem Tutorial konzentrieren wir uns jedoch ausschließlich auf die Verwendung der BSON-Kern-API.

Schauen Sie sich als Alternative zur direkten Verwendung des MongoDB-Treibers und von BSON unseren Spring Data MongoDB-Leitfaden an.

3.1. Anschließen

Zunächst fügen wir den MongoDB-Treiber als Abhängigkeit in unsere Anwendung ein:

 org.mongodb mongodb-driver-sync 3.10.1 

Dann stellen wir eine Verbindung zu einer MongoDB-Datenbank und -Sammlung her:

MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("myDB"); MongoCollection collection = database.getCollection("employees");

In den verbleibenden Abschnitten wird das Erstellen von Abfragen mithilfe der Sammlungsreferenz behandelt .

3.2. Einfügen

Angenommen, wir haben den folgenden JSON, den wir als neues Dokument in eine Mitarbeitersammlung einfügen möchten :

{ "first_name" : "Joe", "last_name" : "Smith", "title" : "Java Developer", "years_of_service" : 3, "skills" : ["java","spring","mongodb"], "manager" : { "first_name" : "Sally", "last_name" : "Johanson" } }

In diesem Beispiel zeigt JSON die häufigsten Datentypen, die bei MongoDB-Dokumenten auftreten würden: Text, numerische Dokumente, Arrays und eingebettete Dokumente.

Um dies mit BSON einzufügen, verwenden wir die Dokument- API von MongoDB :

Document employee = new Document() .append("first_name", "Joe") .append("last_name", "Smith") .append("title", "Java Developer") .append("years_of_service", 3) .append("skills", Arrays.asList("java", "spring", "mongodb")) .append("manager", new Document() .append("first_name", "Sally") .append("last_name", "Johanson")); collection.insertOne(employee); 

Die Document- Klasse ist die primäre API, die in BSON verwendet wird. Es erweitert die Java Map- Oberfläche und enthält mehrere überladene Methoden. Dies erleichtert die Arbeit mit nativen Typen sowie allgemeinen Objekten wie Objekt-IDs, Datumsangaben und Listen.

3.3. Finden

Um ein Dokument in MongoDB zu finden, stellen wir ein Suchdokument bereit, das angibt, in welchen Feldern abgefragt werden soll. Um beispielsweise alle Dokumente mit dem Nachnamen "Smith" zu finden, verwenden wir das folgende JSON-Dokument:

{ "last_name": "Smith" }

In BSON geschrieben wäre dies:

Document query = new Document("last_name", "Smith"); List results = new ArrayList(); collection.find(query).into(results);

"Such" -Abfragen können mehrere Felder akzeptieren. Standardmäßig werden diese mithilfe von Logik und Operator kombiniert. Dies bedeutet, dass nur Dokumente zurückgegeben werden, die allen Feldern entsprechen .

Um dies zu umgehen, bietet MongoDB den Operator oder query an:

{ "$or": [ { "first_name": "Joe" }, { "last_name":"Smith" } ] }

Hier finden Sie alle Dokumente, die entweder den Vornamen "Joe" oder den Nachnamen "Smith" haben. Um dies als BSON zu schreiben, verwenden wir ein verschachteltes Dokument, genau wie die obige Abfrage zum Einfügen:

Document query = new Document("$or", Arrays.asList( new Document("last_name", "Smith"), new Document("first_name", "Joe"))); List results = new ArrayList(); collection.find(query).into(results);

3.4. Aktualisieren

Update-Abfragen unterscheiden sich in MongoDB geringfügig, da zwei Dokumente erforderlich sind :

  1. Die Filterkriterien zum Auffinden eines oder mehrerer Dokumente
  2. Ein Aktualisierungsdokument, das angibt, welche Felder geändert werden sollen

Nehmen wir zum Beispiel an, wir möchten jedem Mitarbeiter, der bereits über eine Frühlingsfähigkeit verfügt, eine Sicherheitsfähigkeit hinzufügen. Im ersten Dokument werden alle Mitarbeiter mit „Frühlings“ -Fähigkeiten gefunden, und im zweiten Dokument wird ein neuer „Sicherheits“ -Eintrag zu ihrem Kompetenzfeld hinzugefügt.

In JSON würden diese beiden Abfragen folgendermaßen aussehen:

{ "skills": { $elemMatch: { "$eq": "spring" } } } { "$push": { "skills": "security" } }

Und in BSON wären sie:

Document query = new Document( "skills", new Document( "$elemMatch", new Document("$eq", "spring"))); Document update = new Document( "$push", new Document("skills", "security")); collection.updateMany(query, update); 

3.5. Löschen

Löschabfragen in MongoDB verwenden dieselbe Syntax wie Suchabfragen. Wir stellen lediglich ein Dokument zur Verfügung, in dem ein oder mehrere übereinstimmende Kriterien angegeben sind.

Angenommen, wir haben einen Fehler in unserer Mitarbeiterdatenbank gefunden und versehentlich Mitarbeiter mit einem negativen Wert für Dienstjahre erstellt. Um sie alle zu finden, würden wir den folgenden JSON verwenden:

{ "years_of_service" : { "$lt" : 0 } }

Das entsprechende BSON-Dokument wäre:

Document query = new Document( "years_of_service", new Document("$lt", 0)); collection.deleteMany(query);

4. Fazit

In diesem Tutorial haben wir eine grundlegende Einführung in das Erstellen von MongoDB-Abfragen mithilfe der BSON-Bibliothek gesehen. Wir haben nur die BSON-API verwendet und grundlegende CRUD-Operationen für eine MongoDB-Sammlung implementiert.

Was wir nicht behandelt haben, sind fortgeschrittenere Themen wie Projektionen, Aggregationen, räumliche Abfragen, Massenoperationen und mehr. All dies ist nur mit der BSON-Bibliothek möglich. Die Beispiele, die wir hier gesehen haben, bilden die Bausteine, die wir zur Implementierung dieser erweiterten Operationen verwenden würden.

Wie immer finden Sie die obigen Codebeispiele in unserem GitHub-Repo.