Eine Anleitung zu MongoDB mit Java

Ein Leitfaden für MongoDB mit Java

 

1. Überblick

In diesem Artikel beschäftigen wir uns mit der Integration vonMongoDB, 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, automatisches Sharding, Replikation, Hochverfügbarkeit usw.

2. MongoDB

Beginnen wir mit ein paar wichtigen Punkten zu MongoDB selbst:

  • speichert Daten inJSON-ä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 geändert werden, indem neue Felder hinzugefügt oder vorhandene gelöscht 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:

  • Table in MySQL wird in Mongo zuCollection

  • Row wird zuDocument

  • Column wird zuField

  • Joins sind alslinking undembedded Dokumente definiert

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 -track the releases here.

5. Verwenden vonMongoDB

Beginnen wir nun mit der Implementierung von Mongo-Abfragen mit Java. Wir werden mit den grundlegenden CRUD-Operationen fortfahren, da sie am besten sind, um damit zu beginnen.

5.1. Stellen Sie eine Verbindung mitMongoClient her

Stellen Sie zunächst eine Verbindung zu einem MongoDB-Server her. Bei Version> = 2.10.0 verwenden wirMongoClient:

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

Verwenden Sie für ältere Versionen die KlasseMongo:

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

5.2. Verbindung zu einer Datenbank herstellen

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

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

In manchen Fällen 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 istlocal die Standard-Mongo-Datenbank.

5.4. Erstellen Sie einCollection

Beginnen wir mit der Erstellung einesCollection (Tabellenäquivalent für MongoDB) für unsere Datenbank. Sobald wir uns mit unserer Datenbank verbunden haben, können wir einCollection machen 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

Die Operationsave hat eine Semantik zum Speichern oder Aktualisieren: Wenn einid vorhanden ist, führt sie einupdate aus, wenn nicht, führt sie eininsert aus.

Wenn wirsaveein neuer Kunde sind:

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

Die Entität wird in eine Datenbank eingefügt:

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

Als nächstes betrachten wir dieselbe Operation -save - mit der Semantik vonupdate.

5.6. Speichern - Aktualisieren

Betrachten wir nunsave mitupdate Semantik, die für einen vorhandenen Kunden ausgeführt wird:

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

Wenn wir nunsaveder bestehende Kunde sind, werden wir es aktualisieren:

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

Die Datenbank sieht folgendermaßen aus:

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

Wie Sie sehen können, verwendetsave in diesem Beispiel die Semantik vonupdate, da wir Objekte mit bestimmten_id verwenden.

5.7. Lesen Sie aDocument von aCollection

Suchen wir nachDocument inCollection, indem wir eine Abfrage durchführen:

BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);

while (cursor.hasNext()) {
    System.out.println(cursor.next());
}

Es werden die einzigenDocument angezeigt, die wir derzeit in unserenCollection haben:

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

5.8. Delete aDocument

Fahren wir mit unserer letzten CRUD-Operation fort: Löschen:

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

collection.remove(searchQuery);

Wenn der obige Befehl ausgeführt wird, werden unsere einzigenDocument aus denCollection entfernt.

6. Fazit

Dieser Artikel war eine kurze Einführung in die Verwendung von MongoDB aus Java.

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