MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB BSON-Leitfaden

1. Einführung

In diesem Tutorial sehen wir uns BSON an 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-Dokumentspeicher-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 für die binäre 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 mehrere Vorteile gegenüber der Verwendung von regulärem JSON:

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

Einer der Hauptvorteile der Verwendung von BSON ist, dass es einfach zu durchlaufen 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 man sie zusammen verwendet. Wir konzentrieren uns auf die Hauptaktionen des Akronyms CRUD (C reate, R ead, U pdate, D löschen).

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

In diesem Abschnitt betrachten wir die Verwendung des Treibers zum Herstellen einer Verbindung mit einem Cluster und die Verwendung der BSON-API zum Durchführen verschiedener Arten von Abfragen. Beachten Sie, dass der MongoDB-Treiber einen Filter bereitstellt Klasse, die uns helfen kann, kompakteren Code zu schreiben. In diesem Tutorial konzentrieren wir uns jedoch ausschließlich auf die Verwendung der Kern-BSON-API.

Als Alternative zur direkten Verwendung des MongoDB-Treibers und von BSON werfen Sie einen Blick in unseren Spring Data MongoDB-Leitfaden.

3.1. Verbinden

Zu Beginn fügen wir unserer Anwendung zunächst den MongoDB-Treiber als Abhängigkeit hinzu:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>3.10.1</version>
</dependency>

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

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

Die verbleibenden Abschnitte behandeln das Erstellen von Abfragen mithilfe der Sammlung Referenz.

3.2. Einfügen

Nehmen wir an, wir haben den folgenden JSON-Code, den wir als neues Dokument in Mitarbeiter einfügen möchten Sammlung:

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

Dieses JSON-Beispiel zeigt die häufigsten Datentypen, auf die wir bei MongoDB-Dokumenten stoßen würden:Text, Zahlen, Arrays und eingebettete Dokumente.

Um dies mit BSON einzufügen, würden wir das Dokument von MongoDB verwenden API:

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);

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

3.3. Suchen

Um ein Dokument in MongoDB zu finden, stellen wir ein Suchdokument bereit, das angibt, welche Felder abgefragt werden sollen. Um beispielsweise alle Dokumente mit dem Nachnamen „Smith“ zu finden, würden wir das folgende JSON-Dokument verwenden:

{  
  "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);

Suchabfragen können mehrere Felder akzeptieren und das Standardverhalten ist die Verwendung der logischen und Betreiber, um sie zu kombinieren. Das bedeutet, dass nur Dokumente zurückgegeben werden, die mit allen Feldern übereinstimmen .

Um dies zu umgehen, stellt MongoDB das oder bereit Abfrageoperator:

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

Dadurch werden alle Dokumente gefunden, die entweder den Vornamen „Joe“ oder den Nachnamen „Smith“ haben. Um dies als BSON zu schreiben, würden wir ein verschachteltes Dokument verwenden genau wie die obige Einfügeabfrage:

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

Aktualisierungsabfragen sind in MongoDB etwas anders, da sie zwei Dokumente erfordern :

  1. Die Filterkriterien, um ein oder mehrere Dokumente zu finden
  2. Ein Aktualisierungsdokument, das angibt, welche Felder geändert werden sollen

Nehmen wir zum Beispiel an, wir möchten jedem Mitarbeiter, der bereits über einen „Feder“-Skill verfügt, einen „Sicherheits“-Skill hinzufügen. Das erste Dokument findet alle Mitarbeiter mit „Spring“-Kenntnissen, und das zweite fügt einen neuen „Sicherheits“-Eintrag zu ihrem Skills-Array hinzu.

In JSON würden diese beiden Abfragen so 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 einfach ein Dokument zur Verfügung, das ein oder mehrere zu erfüllende Kriterien angibt.

Angenommen, wir haben einen Fehler in unserer Mitarbeiterdatenbank gefunden und versehentlich Mitarbeiter a mit einem negativen Wert für Dienstjahre erstellt. Um sie alle zu finden, würden wir das folgende 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);