1. Overzicht
In dit artikel zullen we kijken naar de integratie van MongoDB, een zeer populaire NoSQL open source database met een zelfstandige Java-client.
MongoDB is geschreven in C++ en heeft een flink aantal solide functies, zoals kaartverkleining, auto-sharding, replicatie, hoge beschikbaarheid enz.
2. MongoDB
Laten we beginnen met een paar belangrijke punten over MongoDB zelf:
- slaat gegevens op in JSON-achtige documenten die verschillende structuren kunnen hebben
- gebruikt dynamische schema's, wat betekent dat we records kunnen maken zonder iets vooraf te definiëren
- de structuur van een record kan eenvoudig worden gewijzigd door nieuwe velden toe te voegen of bestaande te verwijderen
Het bovengenoemde datamodel geeft ons de mogelijkheid om hiërarchische relaties weer te geven, om arrays en andere complexere structuren gemakkelijk op te slaan.
3. Terminologieën
Het begrijpen van concepten in MongoDB wordt gemakkelijker als we ze kunnen vergelijken met relationele databasestructuren.
Laten we eens kijken naar de analogieën tussen Mongo en een traditioneel MySQL-systeem:
- Tabel in MySQL wordt een Collectie in Mongo
- Rij wordt een Document
- Kolom wordt een Veld
- Doe mee worden gedefinieerd als linken en ingesloten documenten
Dit is natuurlijk een simplistische manier om naar de MongoDB-kernconcepten te kijken, maar niettemin nuttig.
Laten we nu een duik nemen in de implementatie om deze krachtige database te begrijpen.
4. Maven-afhankelijkheden
We moeten beginnen met het definiëren van de afhankelijkheid van een Java-stuurprogramma voor MongoDB:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.1</version>
</dependency>
Om te controleren of er een nieuwe versie van de bibliotheek is uitgebracht, kunt u de releases hier volgen.
5. Gebruik MongoDB
Laten we nu beginnen met het implementeren van Mongo-query's met Java. We zullen volgen met de basis CRUD-bewerkingen, aangezien deze het beste zijn om mee te beginnen.
5.1. Maak een connectie met MongoClient
Laten we eerst een verbinding maken met een MongoDB-server. Met versie>=2.10.0 gebruiken we de MongoClient :
MongoClient mongoClient = new MongoClient("localhost", 27017);
En gebruik voor oudere versies Mongo klas:
Mongo mongo = new Mongo("localhost", 27017);
5.2. Verbinding maken met een database
Laten we nu verbinding maken met onze database. Het is interessant om op te merken dat we er geen hoeven te maken. Wanneer Mongo ziet dat die database niet bestaat, zal hij deze voor ons aanmaken:
DB database = mongoClient.getDB("myMongoDb");
Soms wordt MongoDB standaard in geverifieerde modus uitgevoerd. In dat geval moeten we ons verifiëren terwijl we verbinding maken met een database.
We kunnen het doen zoals hieronder weergegeven:
MongoClient mongoClient = new MongoClient();
DB database = mongoClient.getDB("myMongoDb");
boolean auth = database.authenticate("username", "pwd".toCharArray());
5.3. Toon bestaande databases
Laten we alle bestaande databases weergeven. Als we de opdrachtregel willen gebruiken, is de syntaxis om databases te tonen vergelijkbaar met MySQL:
show databases;
In Java geven we databases weer met het onderstaande fragment:
mongoClient.getDatabaseNames().forEach(System.out::println);
De uitvoer zal zijn:
local 0.000GB
myMongoDb 0.000GB
Hierboven, lokaal is de standaard Mongo-database.
5.4. Maak een Collectie
Laten we beginnen met het maken van een Collectie (tabelequivalent voor MongoDB) voor onze database. Zodra we verbinding hebben gemaakt met onze database, kunnen we een Verzameling . maken als:
database.createCollection("customers", null);
Laten we nu alle bestaande collecties voor de huidige database weergeven:
database.getCollectionNames().forEach(System.out::println);
De uitvoer zal zijn:
customers
5.5. Opslaan – Invoegen
Het opslaan operatie heeft save-or-update semantiek:als een id aanwezig is, voert het een update uit , zo niet – het doet een insert .
Wanneer we opslaan een nieuwe klant:
DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "Baeldung");
collection.insert(document);
De entiteit wordt in een database ingevoegd:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
Vervolgens bekijken we dezelfde bewerking - opslaan – met update semantiek.
5.6. Opslaan – bijwerken
Laten we nu eens kijken naar opslaan met update semantiek, werkend op een bestaande klant:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
Als we nu opslaan de bestaande klant – we zullen deze updaten:
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);
De database ziet er als volgt uit:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
Zoals je kunt zien, in dit specifieke voorbeeld, opslaan gebruikt de semantiek van update , omdat we object gebruiken met gegeven _id .
5.7. Lees een Document Uit een Collectie
Laten we zoeken naar een Document in een Collectie door een vraag te stellen:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
Het toont het enige Document we hebben inmiddels in onze Collectie :
[
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
]
5.8. Verwijderen een Document
Laten we verder gaan met onze laatste CRUD-bewerking, verwijdering:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
collection.remove(searchQuery);
Met bovenstaande opdracht uitgevoerd, is ons enige Document wordt verwijderd uit de Collectie .