Eine Anleitung zu MongoDB mit Java

1. Übersicht

In diesem Artikel beschäftigen wir uns mit der Integration von MongoDB, einer sehr beliebten NoSQL-Open-Source-Datenbank, in einen eigenständigen Java-Client.

MongoDB ist in C ++ geschrieben und verfügt über eine Reihe solider Funktionen wie Kartenreduzierung, Auto-Sharding, Replikation, Hochverfügbarkeit usw.

2. MongoDB

Beginnen wir mit ein paar wichtigen Punkten über MongoDB selbst:

  • speichert Daten in JSON-ähnlichen Dokumenten, die verschiedene Strukturen haben können
  • verwendet dynamische Schemata, was bedeutet, dass wir Datensätze erstellen können, ohne etwas vordefinieren zu müssen
  • Die Struktur eines Datensatzes kann einfach durch Hinzufügen neuer oder Löschen vorhandener Felder geändert werden

Das oben erwähnte Datenmodell gibt uns die Möglichkeit, hierarchische Beziehungen darzustellen, Arrays und andere komplexere Strukturen einfach zu speichern.

3. Terminologien

Das Verständnis von Konzepten in MongoDB wird einfacher, wenn wir sie mit relationalen Datenbankstrukturen vergleichen können.

Sehen wir uns die Analogien zwischen Mongo und einem traditionellen MySQL-System an:

  • Eine Tabelle in MySQL wird zu einer Sammlung in Mongo
  • Zeile wird zu einem Dokument
  • Spalte wird zu einem Feld
  • Joins ist definiert als Verknüpfung und eingebetteten Dokumente

Dies ist natürlich eine vereinfachte Sichtweise auf die MongoDB-Kernkonzepte, aber dennoch nützlich.

Lassen Sie uns nun in die Implementierung eintauchen, um diese leistungsstarke Datenbank zu verstehen.

4. Maven-Abhängigkeiten

Zunächst müssen wir die Abhängigkeit eines Java-Treibers für MongoDB definieren:

 org.mongodb mongo-java-driver 3.4.1  

Um zu überprüfen, ob eine neue Version der Bibliothek veröffentlicht wurde, verfolgen Sie die Veröffentlichungen hier.

5. Verwenden von MongoDB

Beginnen wir nun mit der Implementierung von Mongo-Abfragen mit Java. Wir werden mit den grundlegenden CRUD-Operationen folgen, da diese am besten zu Beginn sind.

5.1. Stellen Sie eine Verbindung mit MongoClient her

Stellen Sie zunächst eine Verbindung zu einem MongoDB-Server her. Mit Version> = 2.10.0 verwenden wir den MongoClient :

MongoClient mongoClient = new MongoClient("localhost", 27017);

Und für ältere Versionen verwenden Sie die Mongo- Klasse:

Mongo mongo = new Mongo("localhost", 27017);

5.2. Verbindung zu einer Datenbank herstellen

Stellen wir jetzt eine Verbindung zu unserer Datenbank her. Es ist interessant festzustellen, dass wir keine erstellen müssen. Wenn Mongo sieht, dass die Datenbank nicht existiert, wird sie für uns erstellt:

DB database = mongoClient.getDB("myMongoDb");

Manchmal wird MongoDB standardmäßig im authentifizierten Modus ausgeführt. In diesem Fall müssen wir uns authentifizieren, während wir eine Verbindung zu einer Datenbank herstellen.

Wir können es wie folgt machen:

MongoClient mongoClient = new MongoClient(); DB database = mongoClient.getDB("myMongoDb"); boolean auth = database.authenticate("username", "pwd".toCharArray());

5.3. Vorhandene Datenbanken anzeigen

Lassen Sie uns alle vorhandenen Datenbanken anzeigen. Wenn wir die Befehlszeile verwenden möchten, ähnelt die Syntax zum Anzeigen von Datenbanken MySQL:

show databases;

In Java zeigen wir Datenbanken mit dem folgenden Snippet an:

mongoClient.getDatabaseNames().forEach(System.out::println);

Die Ausgabe wird sein:

local 0.000GB myMongoDb 0.000GB

Oben ist local die Standard-Mongo-Datenbank.

5.4. Erstellen Sie eine Sammlung

Beginnen wir mit der Erstellung einer Sammlung (Tabellenäquivalent für MongoDB) für unsere Datenbank. Sobald wir uns mit unserer Datenbank verbunden haben, können wir eine Sammlung erstellen als:

database.createCollection("customers", null);

Lassen Sie uns nun alle vorhandenen Sammlungen für die aktuelle Datenbank anzeigen:

database.getCollectionNames().forEach(System.out::println);

Die Ausgabe wird sein:

customers

5.5. Speichern - Einfügen

The save operation has save-or-update semantics: if an id is present, it performs an update, if not – it does an insert.

When we save a new customer:

DBCollection collection = database.getCollection("customers"); BasicDBObject document = new BasicDBObject(); document.put("name", "Shubham"); document.put("company", "Baeldung"); collection.insert(document);

The entity will be inserted into a database:

{ "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"), "name" : "Shubham", "company" : "Baeldung" }

Next, we’ll look at the same operation – save – with update semantics.

5.6. Save – Update

Let’s now look at save with update semantics, operating on an existing customer:

{ "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"), "name" : "Shubham", "company" : "Baeldung" }

Now, when we save the existing customer – we will update it:

BasicDBObject query = new BasicDBObject(); query.put("name", "Shubham"); BasicDBObject newDocument = new BasicDBObject(); newDocument.put("name", "John"); BasicDBObject updateObject = new BasicDBObject(); updateObject.put("$set", newDocument); collection.update(query, updateObject);

The database will look like this:

{ "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"), "name" : "John", "company" : "Baeldung" }

As you can see, in this particular example, save uses the semantics of update, because we use object with given _id.

5.7. Read a Document From a Collection

Let's search for a Document in a Collection by making a query:

BasicDBObject searchQuery = new BasicDBObject(); searchQuery.put("name", "John"); DBCursor cursor = collection.find(searchQuery); while (cursor.hasNext()) { System.out.println(cursor.next()); }

It will show the only Document we have by now in our Collection:

[ { "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"), "name" : "John", "company" : "Baeldung" } ]

5.8. Delete a Document

Let's move forward to our last CRUD operation, deletion:

BasicDBObject searchQuery = new BasicDBObject(); searchQuery.put("name", "John"); collection.remove(searchQuery);

With above command executed, our only Document will be removed from the Collection.

6. Conclusion

This article was a quick introduction to using MongoDB from Java.

Die Implementierung all dieser Beispiele und Codefragmente finden Sie auf GitHub - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.