sql >> Database teknologi >  >> NoSQL >> MongoDB

En guide til MongoDB med Java

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 .


  1. Fjern indlejret dokument i en indlejret række dokumenter

  2. Hvornår skal jeg bruge en NoSQL-database i stedet for en relationsdatabase? Er det okay at bruge begge på samme side?

  3. konvertering af database fra mysql til mongoDb

  4. Logstash Web UI starter ikke