1. Oversigt
I denne artikel vil vi se på at integrere MongoDB, en meget populær NoSQL open source-database med en selvstændig Java-klient.
MongoDB er skrevet i C++ og har en lang række solide funktioner såsom kort-reducering, auto-sharding, replikering, høj tilgængelighed osv.
2. MongoDB
Lad os starte med et par nøglepunkter om selve MongoDB:
- gemmer data i JSON-lignende dokumenter, der kan have forskellige strukturer
- bruger dynamiske skemaer, hvilket betyder, at vi kan oprette poster uden at foruddefinere noget
- strukturen af en post kan ændres ved blot at tilføje nye felter eller slette eksisterende
Ovennævnte datamodel giver os mulighed for nemt at repræsentere hierarkiske relationer, at gemme arrays og andre mere komplekse strukturer.
3. Terminologier
Det bliver lettere at forstå begreber i MongoDB, hvis vi kan sammenligne dem med relationelle databasestrukturer.
Lad os se analogierne mellem Mongo og et traditionelt MySQL-system:
- Tabel i MySQL bliver en Samling i Mongo
- Række bliver et Dokument
- Kolonne bliver et Felt
- Deltager er defineret som linkning og indlejret dokumenter
Dette er selvfølgelig en forenklet måde at se på MongoDB-kernekoncepterne, men ikke desto mindre nyttig.
Lad os nu dykke ned i implementeringen for at forstå denne kraftfulde database.
4. Maven-afhængigheder
Vi skal starte med at definere afhængigheden af en Java-driver til MongoDB:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.1</version>
</dependency>
For at kontrollere, om en ny version af biblioteket er blevet frigivet – spor udgivelserne her.
5. Brug af MongoDB
Lad os nu begynde at implementere Mongo-forespørgsler med Java. Vi følger med de grundlæggende CRUD-operationer, da de er de bedste til at starte med.
5.1. Opret en forbindelse med MongoClient
Lad os først oprette forbindelse til en MongoDB-server. Med version>=2.10.0 bruger vi MongoClient :
MongoClient mongoClient = new MongoClient("localhost", 27017);
Og for ældre versioner, brug Mongo klasse:
Mongo mongo = new Mongo("localhost", 27017);
5.2. Opretter forbindelse til en database
Lad os nu oprette forbindelse til vores database. Det er interessant at bemærke, at vi ikke behøver at oprette en. Når Mongo ser, at databasen ikke eksisterer, vil den oprette den for os:
DB database = mongoClient.getDB("myMongoDb");
Nogle gange kører MongoDB som standard i godkendt tilstand. I så fald skal vi godkende, mens vi opretter forbindelse til en database.
Vi kan gøre det som vist nedenfor:
MongoClient mongoClient = new MongoClient();
DB database = mongoClient.getDB("myMongoDb");
boolean auth = database.authenticate("username", "pwd".toCharArray());
5.3. Vis eksisterende databaser
Lad os vise alle eksisterende databaser. Når vi vil bruge kommandolinjen, ligner syntaksen for at vise databaser MySQL:
show databases;
I Java viser vi databaser ved hjælp af uddrag nedenfor:
mongoClient.getDatabaseNames().forEach(System.out::println);
Outputtet vil være:
local 0.000GB
myMongoDb 0.000GB
Ovenfor lokalt er standard Mongo-databasen.
5.4. Opret en samling
Lad os starte med at oprette en Samling (tabelækvivalent for MongoDB) til vores database. Når vi har oprettet forbindelse til vores database, kan vi lave en samling som:
database.createCollection("customers", null);
Lad os nu vise alle eksisterende samlinger for den aktuelle database:
database.getCollectionNames().forEach(System.out::println);
Outputtet vil være:
customers
5.5. Gem – Indsæt
Gem operationen har gem-eller-opdater semantik:hvis et id er til stede, udfører den en opdatering , hvis ikke – det gør en indsættelse .
Når vi gemmer en ny kunde:
DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "Baeldung");
collection.insert(document);
Enheden vil blive indsat i en database:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
Dernæst vil vi se på den samme handling – gem – med opdatering semantik.
5.6. Gem – Opdater
Lad os nu se på gem med opdatering semantik, der opererer på en eksisterende kunde:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
Nu, når vi gemmer den eksisterende kunde – vi opdaterer den:
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);
Databasen vil se sådan ud:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
Som du kan se, gem i dette særlige eksempel bruger semantikken i opdatering , fordi vi bruger objekt med givet _id .
5.7. Læs et Dokument Fra en samling
Lad os søge efter et Dokument i en samling ved at lave en forespørgsel:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
Det vil vise det eneste Dokument vi har nu i vores Samling :
[
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
]
5.8. Slet et Dokument
Lad os gå videre til vores sidste CRUD-operation, sletning:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
collection.remove(searchQuery);
Med ovenstående kommando udført, er vores eneste Dokument vil blive fjernet fra Samlingen .