Una guía para MongoDB con Java

1. Información general

En este artículo, veremos cómo integrar MongoDB, una base de datos de código abierto NoSQL muy popular con un cliente Java independiente.

MongoDB está escrito en C ++ y tiene una gran cantidad de características sólidas, como reducción de mapas, fragmentación automática, replicación, alta disponibilidad, etc.

2. MongoDB

Comencemos con algunos puntos clave sobre MongoDB en sí:

  • almacena datos en documentos similares a JSON que pueden tener varias estructuras
  • utiliza esquemas dinámicos, lo que significa que podemos crear registros sin predefinir nada
  • la estructura de un registro se puede cambiar simplemente agregando nuevos campos o eliminando los existentes

El modelo de datos mencionado anteriormente nos brinda la capacidad de representar relaciones jerárquicas, almacenar matrices y otras estructuras más complejas fácilmente.

3. Terminologías

Comprender conceptos en MongoDB se vuelve más fácil si podemos compararlos con estructuras de bases de datos relacionales.

Veamos las analogías entre Mongo y un sistema MySQL tradicional:

  • La tabla en MySQL se convierte en una colección en Mongo
  • La fila se convierte en un documento
  • La columna se convierte en un campo
  • Las uniones se definen como documentos vinculados e integrados

Esta es una forma simplista de ver los conceptos centrales de MongoDB, por supuesto, pero no obstante útil.

Ahora, profundicemos en la implementación para comprender esta poderosa base de datos.

4. Dependencias de Maven

Necesitamos comenzar por definir la dependencia de un controlador Java para MongoDB:

 org.mongodb mongo-java-driver 3.4.1  

Para comprobar si se ha lanzado alguna versión nueva de la biblioteca, haga un seguimiento de los lanzamientos aquí.

5. Usando MongoDB

Ahora, comencemos a implementar consultas de Mongo con Java. Seguiremos con las operaciones CRUD básicas ya que son las mejores para empezar.

5.1. Establezca una conexión con MongoClient

Primero, hagamos una conexión a un servidor MongoDB. Con la versión> = 2.10.0, usaremos MongoClient :

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

Y para versiones anteriores, use la clase Mongo :

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

5.2. Conectarse a una base de datos

Ahora, conectemos a nuestra base de datos. Es interesante notar que no es necesario crear uno. Cuando Mongo vea que esa base de datos no existe, la creará para nosotros:

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

A veces, de forma predeterminada, MongoDB se ejecuta en modo autenticado. En ese caso, necesitamos autenticarnos mientras nos conectamos a una base de datos.

Podemos hacerlo como se presenta a continuación:

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

5.3. Mostrar bases de datos existentes

Visualicemos todas las bases de datos existentes. Cuando queremos usar la línea de comandos, la sintaxis para mostrar las bases de datos es similar a MySQL:

show databases;

En Java, mostramos bases de datos usando el siguiente fragmento:

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

La salida será:

local 0.000GB myMongoDb 0.000GB

Arriba, local es la base de datos predeterminada de Mongo.

5.4. Crear una colección

Comencemos creando una Colección (tabla equivalente a MongoDB) para nuestra base de datos. Una vez que nos hayamos conectado a nuestra base de datos, podemos hacer una Colección como:

database.createCollection("customers", null);

Ahora, mostremos todas las colecciones existentes para la base de datos actual:

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

La salida será:

customers

5.5. Guardar - Insertar

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.

La implementación de todos estos ejemplos y fragmentos de código se puede encontrar en GitHub: este es un proyecto basado en Maven, por lo que debería ser fácil de importar y ejecutar como está.