Una guida a MongoDB con Java

1. Panoramica

In questo articolo daremo un'occhiata all'integrazione di MongoDB, un database open source NoSQL molto popolare con un client Java autonomo.

MongoDB è scritto in C ++ e ha un buon numero di solide funzionalità come la riduzione della mappa, il partizionamento automatico, la replica, l'alta disponibilità ecc.

2. MongoDB

Cominciamo con alcuni punti chiave su MongoDB stesso:

  • memorizza i dati in documenti simili a JSON che possono avere varie strutture
  • utilizza schemi dinamici, il che significa che possiamo creare record senza predefinire nulla
  • la struttura di un record può essere modificata semplicemente aggiungendo nuovi campi o eliminando quelli esistenti

Il modello di dati sopra menzionato ci dà la capacità di rappresentare relazioni gerarchiche, di memorizzare facilmente array e altre strutture più complesse.

3. Terminologie

La comprensione dei concetti in MongoDB diventa più facile se possiamo confrontarli con le strutture di database relazionali.

Vediamo le analogie tra Mongo e un sistema MySQL tradizionale:

  • La tabella in MySQL diventa una raccolta in Mongo
  • La riga diventa un documento
  • La colonna diventa un campo
  • I join sono definiti come collegamenti e documenti incorporati

Questo è un modo semplicistico di guardare ai concetti fondamentali di MongoDB, ovviamente, ma comunque utile.

Ora, immergiamoci nell'implementazione per comprendere questo potente database.

4. Dipendenze di Maven

Dobbiamo iniziare definendo la dipendenza di un driver Java per MongoDB:

 org.mongodb mongo-java-driver 3.4.1  

Per verificare se è stata rilasciata una nuova versione della libreria, tenere traccia delle versioni qui.

5. Utilizzo di MongoDB

Ora iniziamo a implementare le query Mongo con Java. Seguiremo con le operazioni CRUD di base in quanto sono le migliori per iniziare.

5.1. Crea una connessione con MongoClient

Per prima cosa, stabiliamo una connessione a un server MongoDB. Con la versione> = 2.10.0, useremo MongoClient :

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

E per le versioni precedenti usa la classe Mongo :

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

5.2. Connessione a un database

Ora connettiamoci al nostro database. È interessante notare che non è necessario crearne uno. Quando Mongo vede che il database non esiste, lo creerà per noi:

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

A volte, per impostazione predefinita, MongoDB viene eseguito in modalità autenticata. In tal caso, dobbiamo autenticarci durante la connessione a un database.

Possiamo farlo come presentato di seguito:

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

5.3. Mostra database esistenti

Visualizziamo tutti i database esistenti. Quando vogliamo utilizzare la riga di comando, la sintassi per mostrare i database è simile a MySQL:

show databases;

In Java, visualizziamo i database utilizzando lo snippet di seguito:

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

L'output sarà:

local 0.000GB myMongoDb 0.000GB

Sopra, local è il database Mongo predefinito.

5.4. Crea una raccolta

Iniziamo creando una raccolta (equivalente di tabella per MongoDB) per il nostro database. Una volta che ci siamo collegati al nostro database, possiamo fare una raccolta come:

database.createCollection("customers", null);

Ora, mostriamo tutte le raccolte esistenti per il database corrente:

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

L'output sarà:

customers

5.5. Salva - Inserisci

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.

L'implementazione di tutti questi esempi e frammenti di codice può essere trovata su GitHub: questo è un progetto basato su Maven, quindi dovrebbe essere facile da importare ed eseguire così com'è.