sql >> Base de Datos >  >> NoSQL >> MongoDB

Una guía para MongoDB con Java

1. Resumen

En este artículo, echaremos un vistazo a la integración de 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 funciones 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:

  • 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:

  • Mesa en MySQL se convierte en una Colección en Mongo
  • Fila se convierte en un Documento
  • Columna se convierte en un Campo
  • Únete se definen como enlace y incrustado documentos

Esta es una forma simplista de ver los conceptos básicos de MongoDB, por supuesto, pero sin embargo útil.

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

4. Dependencias Maven

Necesitamos comenzar definiendo la dependencia de un controlador Java para MongoDB:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.4.1</version>
</dependency>

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

5. Uso de 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. Establecer una conexión con MongoClient

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

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

Y para versiones anteriores usa Mongo clase:

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

5.2. Conexión a una base de datos

Ahora, conectémonos a nuestra base de datos. Es interesante notar que no necesitamos crear uno. Cuando Mongo vea que la 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, debemos 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

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

show databases;

En Java, mostramos las 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 por crear una Colección (equivalente de tabla para 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

El guardar la operación tiene una semántica de guardar o actualizar:si un id está presente, realiza una actualización , si no, hace una inserción .

Cuando ahorramos un nuevo cliente:

DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "Baeldung");
collection.insert(document);

La entidad se insertará en una base de datos:

{
    "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
    "name" : "Shubham",
    "company" : "Baeldung"
}

A continuación, veremos la misma operación:guardar – con actualizar semántica.

5.6. Guardar – Actualizar

Veamos ahora guardar con actualizar semántica, operando en un cliente existente:

{
    "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
    "name" : "Shubham",
    "company" : "Baeldung"
}

Ahora, cuando guardamos el cliente existente:lo actualizaremos:

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);

La base de datos se verá así:

{
    "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
    "name" : "John",
    "company" : "Baeldung"
}

Como puede ver, en este ejemplo particular, guardar usa la semántica de update , porque usamos el objeto con el _id dado .

5.7. Leer un Documento De una Colección

Busquemos un Documento en una Colección haciendo una consulta:

BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);

while (cursor.hasNext()) {
    System.out.println(cursor.next());
}

Mostrará el único Documento tenemos ahora en nuestra Colección :

[
    {
      "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
      "name" : "John",
      "company" : "Baeldung"
    }
]

5.8. Eliminar un Documento

Avancemos a nuestra última operación CRUD, eliminación:

BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");

collection.remove(searchQuery);

Con el comando anterior ejecutado, nuestro único Documento será eliminado de la Colección .