En este módulo, aprenderás cómo integrar MongoDB con Java, uno de los lenguajes de programación más populares. Exploraremos cómo conectarse a una base de datos MongoDB, realizar operaciones CRUD y utilizar algunas características avanzadas de MongoDB desde una aplicación Java.

Contenido

Configuración del Entorno

Requisitos Previos

  • Java Development Kit (JDK) instalado.
  • MongoDB instalado y en ejecución.
  • Un IDE como IntelliJ IDEA o Eclipse.

Dependencias

Para trabajar con MongoDB en Java, utilizaremos el driver oficial de MongoDB para Java. Puedes agregarlo a tu proyecto utilizando Maven o Gradle.

Maven

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.3.1</version>
</dependency>

Gradle

implementation 'org.mongodb:mongodb-driver-sync:4.3.1'

Conexión a MongoDB

Para conectarse a una base de datos MongoDB desde Java, utilizaremos la clase MongoClient.

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;

public class MongoDBConnection {
    public static void main(String[] args) {
        // Crear una instancia de MongoClient
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");

        // Conectar a la base de datos "test"
        MongoDatabase database = mongoClient.getDatabase("test");

        System.out.println("Conexión exitosa a la base de datos: " + database.getName());
    }
}

Explicación

  • MongoClients.create("mongodb://localhost:27017"): Crea una instancia de MongoClient conectada al servidor MongoDB en localhost en el puerto 27017.
  • mongoClient.getDatabase("test"): Obtiene una referencia a la base de datos llamada "test".

Operaciones CRUD

Crear Documentos

Para insertar documentos en una colección, utilizamos el método insertOne.

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

public class CreateDocument {
    public static void main(String[] args) {
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("users");

        Document user = new Document("name", "John Doe")
                            .append("age", 30)
                            .append("email", "[email protected]");

        collection.insertOne(user);
        System.out.println("Documento insertado con éxito");
    }
}

Leer Documentos

Para leer documentos de una colección, utilizamos el método find.

import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

public class ReadDocument {
    public static void main(String[] args) {
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("users");

        FindIterable<Document> users = collection.find();

        for (Document user : users) {
            System.out.println(user.toJson());
        }
    }
}

Actualizar Documentos

Para actualizar documentos, utilizamos el método updateOne.

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import com.mongodb.client.model.Updates;

public class UpdateDocument {
    public static void main(String[] args) {
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("users");

        Document query = new Document("name", "John Doe");
        Document update = new Document("$set", new Document("age", 31));

        collection.updateOne(query, update);
        System.out.println("Documento actualizado con éxito");
    }
}

Eliminar Documentos

Para eliminar documentos, utilizamos el método deleteOne.

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

public class DeleteDocument {
    public static void main(String[] args) {
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("users");

        Document query = new Document("name", "John Doe");

        collection.deleteOne(query);
        System.out.println("Documento eliminado con éxito");
    }
}

Consultas Avanzadas

Puedes realizar consultas más complejas utilizando filtros y operadores.

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import com.mongodb.client.model.Filters;

public class AdvancedQuery {
    public static void main(String[] args) {
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("users");

        Document user = collection.find(Filters.and(Filters.eq("name", "John Doe"), Filters.gt("age", 25))).first();

        if (user != null) {
            System.out.println(user.toJson());
        } else {
            System.out.println("No se encontró ningún documento que coincida con la consulta");
        }
    }
}

Manejo de Errores

Es importante manejar posibles errores al interactuar con MongoDB.

import com.mongodb.MongoException;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;

public class ErrorHandling {
    public static void main(String[] args) {
        try {
            MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
            MongoDatabase database = mongoClient.getDatabase("test");
            System.out.println("Conexión exitosa a la base de datos: " + database.getName());
        } catch (MongoException e) {
            System.err.println("Error al conectarse a MongoDB: " + e.getMessage());
        }
    }
}

Ejercicios Prácticos

Ejercicio 1: Insertar y Leer Documentos

  1. Inserta un documento en una colección llamada "products" con los campos "name", "price" y "category".
  2. Lee todos los documentos de la colección "products" y muestra sus contenidos.

Ejercicio 2: Actualizar y Eliminar Documentos

  1. Actualiza el campo "price" de un producto específico en la colección "products".
  2. Elimina un documento de la colección "products" basado en el campo "name".

Soluciones

Solución Ejercicio 1

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import com.mongodb.client.FindIterable;

public class Exercise1 {
    public static void main(String[] args) {
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("products");

        // Insertar documento
        Document product = new Document("name", "Laptop")
                            .append("price", 1200)
                            .append("category", "Electronics");
        collection.insertOne(product);

        // Leer documentos
        FindIterable<Document> products = collection.find();
        for (Document doc : products) {
            System.out.println(doc.toJson());
        }
    }
}

Solución Ejercicio 2

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import com.mongodb.client.model.Updates;

public class Exercise2 {
    public static void main(String[] args) {
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("products");

        // Actualizar documento
        Document query = new Document("name", "Laptop");
        Document update = new Document("$set", new Document("price", 1100));
        collection.updateOne(query, update);

        // Eliminar documento
        Document deleteQuery = new Document("name", "Laptop");
        collection.deleteOne(deleteQuery);
    }
}

Conclusión

En este módulo, hemos aprendido cómo integrar MongoDB con Java, realizar operaciones CRUD básicas y avanzadas, y manejar errores. Con estos conocimientos, estás preparado para construir aplicaciones Java que interactúen eficientemente con MongoDB. En el siguiente módulo, exploraremos cómo aplicar estos conceptos en aplicaciones del mundo real.

© Copyright 2024. Todos los derechos reservados