1. Introducción
En este tutorial, veremos BSON y cómo podemos usarlo para interactuar con MongoDB.
Ahora, una descripción detallada de MongoDB y todas sus capacidades está más allá del alcance de este artículo. Sin embargo, será útil comprender algunos conceptos clave.
MongoDB es un motor de almacenamiento de documentos NoSQL distribuido. Los documentos se almacenan como datos BSON y se agrupan en colecciones. Los documentos de una colección son análogos a las filas de una tabla de base de datos relacional .
Para una mirada más profunda, eche un vistazo al artículo introductorio de MongoDB.
2. ¿Qué es BSON ?
BSON son las siglas de Binary JSON . Es un protocolo para la serialización binaria de datos similares a JSON.
JSON es un formato de intercambio de datos que es popular en los servicios web modernos. Proporciona una forma flexible de representar estructuras de datos complejas.
BSON ofrece varias ventajas sobre el uso de JSON normal:
- Compacto: en la mayoría de los casos, almacenar una estructura BSON requiere menos espacio que su equivalente JSON
- Tipos de datos: BSON proporciona tipos de datos adicionales que no se encuentran en JSON normal, como Date y BinData
Uno de los principales beneficios de usar BSON es que es fácil de atravesar . Los documentos BSON contienen metadatos adicionales que permiten una fácil manipulación de los campos de un documento, sin tener que leer todo el documento.
3. El controlador MongoDB
Ahora que tenemos un conocimiento básico de BSON y MongoDB, veamos cómo usarlos juntos. Nos centraremos en las principales acciones del acrónimo CRUD ( C reate, R ead, U pdate, D elete).
MongoDB proporciona controladores de software para la mayoría de los lenguajes de programación modernos. Los controladores se construyen sobre la biblioteca BSON , lo que significa que trabajaremos directamente con la API BSON al crear consultas. Para obtener más información, consulte nuestra guía del lenguaje de consulta de MongoDB.
En esta sección, veremos cómo usar el controlador para conectarse a un clúster y usar la API BSON para realizar diferentes tipos de consultas. Tenga en cuenta que el controlador MongoDB proporciona una clase Filters que puede ayudarnos a escribir código más compacto. Sin embargo, para este tutorial, nos centraremos únicamente en el uso de la API BSON principal.
Como alternativa a usar el controlador MongoDB y BSON directamente, eche un vistazo a nuestra guía Spring Data MongoDB.
3.1. Conectando
Para comenzar, primero agregamos el controlador MongoDB como una dependencia en nuestra aplicación:
org.mongodb mongodb-driver-sync 3.10.1
Luego creamos una conexión a una base de datos y colección MongoDB:
MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("myDB"); MongoCollection collection = database.getCollection("employees");
Las secciones restantes analizarán la creación de consultas utilizando la referencia de la colección .
3.2. Insertar
Digamos que tenemos el siguiente JSON que queremos insertar como un nuevo documento en una colección de empleados :
{ "first_name" : "Joe", "last_name" : "Smith", "title" : "Java Developer", "years_of_service" : 3, "skills" : ["java","spring","mongodb"], "manager" : { "first_name" : "Sally", "last_name" : "Johanson" } }
Este JSON de ejemplo muestra los tipos de datos más comunes que encontraríamos con los documentos MongoDB: texto, numérico, matrices y documentos incrustados.
Para insertar esto usando BSON, usaríamos la API de documentos de MongoDB :
Document employee = new Document() .append("first_name", "Joe") .append("last_name", "Smith") .append("title", "Java Developer") .append("years_of_service", 3) .append("skills", Arrays.asList("java", "spring", "mongodb")) .append("manager", new Document() .append("first_name", "Sally") .append("last_name", "Johanson")); collection.insertOne(employee);
La clase Document es la API principal que se utiliza en BSON. Amplía la interfaz de Java Map y contiene varios métodos sobrecargados. Esto facilita el trabajo con tipos nativos, así como con objetos comunes como ID de objeto, fechas y listas.
3.3. Encontrar
Para encontrar un documento en MongoDB, proporcionamos un documento de búsqueda que especifica en qué campos consultar. Por ejemplo, para encontrar todos los documentos que tienen el apellido "Smith", usaríamos el siguiente documento JSON:
{ "last_name": "Smith" }
Escrito en BSON esto sería:
Document query = new Document("last_name", "Smith"); List results = new ArrayList(); collection.find(query).into(results);
Las consultas "Buscar" pueden aceptar varios campos y el comportamiento predeterminado es utilizar el operador lógico y para combinarlos. Esto significa que solo se devolverán los documentos que coincidan con todos los campos .
Para evitar esto, MongoDB proporciona el operador de consulta or :
{ "$or": [ { "first_name": "Joe" }, { "last_name":"Smith" } ] }
Esto encontrará todos los documentos que tengan el nombre "Joe" o el apellido "Smith". Para escribir esto como BSON, usaríamos un Documento anidado como la consulta de inserción anterior:
Document query = new Document("$or", Arrays.asList( new Document("last_name", "Smith"), new Document("first_name", "Joe"))); List results = new ArrayList(); collection.find(query).into(results);
3.4. Actualizar
Las consultas de actualización son un poco diferentes en MongoDB porque requieren dos documentos :
- Los criterios de filtrado para encontrar uno o más documentos
- Un documento de actualización que especifica qué campos modificar
Por ejemplo, digamos que queremos agregar una habilidad de "seguridad" a cada empleado que ya tiene una habilidad de "primavera". El primer documento encontrará a todos los empleados con habilidades "primaverales" y el segundo agregará una nueva entrada de "seguridad" a su conjunto de habilidades.
En JSON, estas dos consultas se verían así:
{ "skills": { $elemMatch: { "$eq": "spring" } } } { "$push": { "skills": "security" } }
Y en BSON, serían:
Document query = new Document( "skills", new Document( "$elemMatch", new Document("$eq", "spring"))); Document update = new Document( "$push", new Document("skills", "security")); collection.updateMany(query, update);
3.5. Eliminar
Las consultas de eliminación en MongoDB utilizan la misma sintaxis que las consultas de búsqueda. Simplemente proporcionamos un documento que especifica uno o más criterios para coincidir.
Por ejemplo, digamos que encontramos un error en nuestra base de datos de empleados y accidentalmente creamos empleados con un valor negativo por años de servicio. Para encontrarlos todos, usaríamos el siguiente JSON:
{ "years_of_service" : { "$lt" : 0 } }
El documento BSON equivalente sería:
Document query = new Document( "years_of_service", new Document("$lt", 0)); collection.deleteMany(query);
4. Conclusión
En este tutorial, hemos visto una introducción básica a la creación de consultas MongoDB utilizando la biblioteca BSON. Utilizando solo la API BSON, implementamos operaciones CRUD básicas para una colección MongoDB.
Lo que no hemos cubierto son temas más avanzados como proyecciones, agregaciones, consultas geoespaciales, operaciones masivas y más. Todo esto es posible usando solo la biblioteca BSON. Los ejemplos que hemos visto aquí forman los componentes básicos que usaríamos para implementar estas operaciones más avanzadas.
Como siempre, puede encontrar los ejemplos de código anteriores en nuestro repositorio de GitHub.