Herramientas de usuario

Herramientas del sitio


apuntes:mongodb

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

apuntes:mongodb [2019/02/02 22:50] – [Operaciones básicas] fernandoapuntes:mongodb [2024/09/16 16:03] (actual) – editor externo 127.0.0.1
Línea 2: Línea 2:
  
 ===== Introducción a las Bases de Datos NoSQL ===== ===== Introducción a las Bases de Datos NoSQL =====
-Los sistemas de bases de datos relacionales se llevan utilizando desde la década de los 70. Su principal característica es la consistencia e integridad de sus datos debido al control de las relaciones entre estos y las restricciones.+Con el potente crecimiento de las redes sociales, se ha necesitado dar respuestas rápidas a una cantidad elevada de clientes, con peticiones de enormes colecciones de datos.
  
-Pero con el potente crecimiento de las redes socialesempresas como //Google////Amazon//, //Twitter// o //Facebook// debían enfrentarse a la necesidad de procesar grandes volúmenes de datos con estructuras más o menos similaresCon el crecimiento de la web, se debía dar respuesta a peticiciones de un número elevado de usuarios en el menor tiempo posible+Viendo que los tradicionales SGBD Relacionales emplean demasiado tiempo en controlar la consistencia de los datos (relacionesrestricciones)se necesita un mayor rendimiento a la hora de obtener muchos datos en tiempo realDe estas necesidades surgen las bases de datos **NoSQL** (Not Only SQL).
  
-Viendo que los tradicionales SGBD Relacionales empleaban demasiado tiempo en controlar la consistencia de los datos, se necesitaba un mayor rendimiento a la hora de gestionar los datos en tiempo real.+Se caracterizan por no emplear SQL como lenguaje principal de consulta. Existen diferentes tipos de bbdd NoSql: 
 +  * bbdd clave-valor 
 +  * bbdd de Documentos 
 +  * bbdd orientadas a objetos 
 +  * bbdd en grafo 
 ===== MongoDB ===== ===== MongoDB =====
  
 ==== ¿Qué es MongoDB? ==== ==== ¿Qué es MongoDB? ====
  
-[[http://mongodb.com|MongoDB]] es una base de datos de código abierto orientada a documentos, clasificada como un SGBD NoSQL. Utiliza documentos basados en JSON (JavaScript Object Notation) para almacenar informacion en la base de datos.+[[http://mongodb.com|MongoDB]] es un sistema gestor de bases de datos NoSQL de código abierto, orientado a documentos. Utiliza documentos basados en JSON (JavaScript Object Notation) para almacenar informacion en la base de datos.
  
 La principal diferencia con los tradicionales sistemas relacionales, es la flexibilidad a la hora de modificar la estructura de los datos almacenados. Los documentos almacenados en una base de datos (colección) pueden tener diferentes campos. La principal diferencia con los tradicionales sistemas relacionales, es la flexibilidad a la hora de modificar la estructura de los datos almacenados. Los documentos almacenados en una base de datos (colección) pueden tener diferentes campos.
 ==== Estructura de una Base de Datos ==== ==== Estructura de una Base de Datos ====
-Como se ha comentado, //MongoDB// almacena la información y forma el esquema de la base de datos mediante el uso de documentos //BSON// (Binary JSON), tal como se muestra en la siguiente figura: +Como se ha comentado, //MongoDB// almacena la información y forma el esquema de la base de datos mediante el uso de documentos //BSON// (Binary JSON). Los ficheros JSON son relaciones clave-valor tienen el siguiente aspecto:
  
 {{ jsondocument.png }} {{ jsondocument.png }}
-> Documento BSON en MongoDB+Estructura Documento BSON
  
-Así, el esquema en MongoDB es totalmente flexible puesto que no obliga a diseñar un esquema o modelo antes de poder comenzar a registrar información. De esa forma es mucho más fácil mapear los documentos con objetos en nuestra aplicación, puesto que es fácil adaptarnos a los cambios que estos últimos puedan sufrir.+Así, el esquema en MongoDB es totalmente flexible puesto que depende solamente del documento insertado, **pudiendo tener cada documento distinta cantidad de campos**. De esa forma es mucho más fácil mapear los documentos con objetos en nuestra aplicación, puesto que es fácil adaptarnos a los cambios que estos últimos puedan sufrir.
  
 ^SGBD Relacional^ MongoDB^ ^SGBD Relacional^ MongoDB^
Línea 30: Línea 33:
  
 ==== Documentos BSON  ==== ==== Documentos BSON  ====
-BSON es una representación binario de documentos tipo JSON. Permite integrar sub-documentos así como el uso de arrays, pero también permite representar [[https://docs.mongodb.com/manual/reference/bson-types/|tipos de datos]] a diferencia de JSON. +BSON es una representación binaria de documentos tipo JSON. Permite integrar sub-documentos así como el uso de arrays, pero también permite representar [[https://docs.mongodb.com/manual/reference/bson-types/|tipos de datos]] a diferencia de JSON. 
  
-Estos documentos de texto son ligeros y utilizan una cláve única por cada documento (campo _id). Además, su información es almacenada mediante parejas //clave-valor//. Cada elemento de un documento tiene una clave única (campo), lo que permite la recuperación de la información de forma muy rápida. +Estos documentos de texto son ligeros y utilizan una cláve única por cada documento (campo _id). Cada documento está formado por campos únicos (clavesa los que se les da un valor, lo que permite la recuperación de la información de forma muy rápida. 
  
 === Campo _id === === Campo _id ===
 En MongoDB, cada documento almacenado en una colección requiere un identificador único que actúa de forma similar a una //clave primaria//. Si se omite este campo en un documento insertado en una colección, MongoDB genera automáticamente un valor ''ObjectId'' para el campo ''_id''. En MongoDB, cada documento almacenado en una colección requiere un identificador único que actúa de forma similar a una //clave primaria//. Si se omite este campo en un documento insertado en una colección, MongoDB genera automáticamente un valor ''ObjectId'' para el campo ''_id''.
  
-El tipo de datos ''ObjectID'' de los documentos BSON es un valor de 12 bytes único, fácil y rápido de generar y está ordenado.+El tipo de datos ''ObjectID'' de los documentos BSON es un valor de 12 bytes único, fácil y rápido de generary está ordenado.
 ===== Puesta en marcha de MongoDB ===== ===== Puesta en marcha de MongoDB =====
 Una vez descargado el servidor [[http://www.mongodb.org|MongoDB Server]], para ponerlo en marcha tendremos que crear la ruta donde queremos que se almacenen nuestras bases de datos. Y a continuación, lanzar el servidor ejecutando el siguiente comando: Una vez descargado el servidor [[http://www.mongodb.org|MongoDB Server]], para ponerlo en marcha tendremos que crear la ruta donde queremos que se almacenen nuestras bases de datos. Y a continuación, lanzar el servidor ejecutando el siguiente comando:
Línea 59: Línea 62:
 {{ :apuntes:mongodb-server-conf.png?nolink&400 |}} {{ :apuntes:mongodb-server-conf.png?nolink&400 |}}
  
-MongoDB también incluye su propio cliente GUI para administrar las bases de datos. Se llama [[https://www.mongodb.com/products/compass|MongoDB Compass]] y se incluye con el paquete de instalación de Mondo DB:+MongoDB también incluye su propio cliente GUI para administrar las bases de datos. Se llama [[https://www.mongodb.com/products/compass|MongoDB Compass]] y se incluye con el paquete de instalación de Mongo DB:
 {{ :apuntes:mongo-compass.png?nolink&600 |}} {{ :apuntes:mongo-compass.png?nolink&600 |}}
  
-Además, //MongoDB// dispone de una consola cliente que podemos lanzar ejecutando el comando ''mongo'', que intentará conectar directamente con un servidor ubicado en el propio equipo y con el puerto por defecto, el 27017. También podemos especificar esos parámetros desde la línea de comandos al ejecutarlo (junto con usuario y contraseña si fuera necesario también):+Además, //MongoDB// también dispone de una consola cliente que podemos lanzar ejecutando el comando ''mongo'', que intentará conectar directamente con un servidor ubicado en el propio equipo y con el puerto por defecto, el 27017. También podemos especificar esos parámetros desde la línea de comandos al ejecutarlo (junto con usuario y contraseña si fuera necesario también):
  
   * En Windows   * En Windows
Línea 145: Línea 148:
 <code java> <code java>
 MongoClient mongoClient = new MongoClient(); MongoClient mongoClient = new MongoClient();
-MongoDatabase db = mongoClient.getDatabase("basededatos");+//O si quiero abrir conexiones con un servidor remoto 
 +MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); 
 + 
 +//Establecer conexión con una base de datos 
 +MongoDatabase db = mongoClient.getDatabase("baseDatos");
  
 //Y si queremos trabajar directamente con una coleccion concreta //Y si queremos trabajar directamente con una coleccion concreta
Línea 154: Línea 161:
  
 === Desconectar de la Base de Datos === === Desconectar de la Base de Datos ===
-Nos debemos asegurar de cerrar los recursos abiertos con el servidor+Debemos asegurarnos de cerrar los recursos abiertos con el servidor
 <code java> <code java>
 mongoClient.close() mongoClient.close()
Línea 162: Línea 169:
 ==== Operaciones básicas ==== ==== Operaciones básicas ====
  
-MongoDB proporciona varias vías para ejecutar cada una de las operaciones CRUD ((https://docs.mongodb.com/manual/crud/)) (Create, Read, Update, Delete) que podemos realizar en todo SGBD. Los documentos son representados por objetos de la clase ''org.bson.Document''.+MongoDB proporciona varias vías para ejecutar cada una de las operaciones CRUD ((https://docs.mongodb.com/manual/crud/)) (Create, Read, Update, Delete) que podemos realizar en todo SGBD.  
 + 
 +En java los documentos que utilizamos en estas operaciones pueden estar representados por objetos de la clase ''org.bson.Document''.
  
 === Operaciones de inserción=== === Operaciones de inserción===
Línea 207: Línea 216:
 === Operaciones de modificacion === === Operaciones de modificacion ===
  
-  * //db.collection.updateOne()// +  * //db.collection.replaceOne()//: Sustituir un documento completo 
-  * //db.collection.updateMany()// +  * //db.collection.updateOne()// : Actualizar campos en un documento 
-  * //db.collection.replaceOne()//+  * //db.collection.updateMany()//: Actualizar campos en varios documento 
  
 Ejemplo desde consola Ejemplo desde consola
Línea 253: Línea 263:
  
 <code java> <code java>
-db.getCollection("libros").deleteOne(new Document("titulo", "Secuestrado"));+//Para borrar un solo documento debemos utilizar un valor para un campo único (_id) 
 +db.getCollection("libros").deleteOne(new Document("_id", "345367")); 
 + 
 +db.getCollection("libros").deleteMany(new Document("autor", "Reverte")); 
 </code> </code>
  
Línea 265: Línea 279:
 db.usuarios.find(                                   // colección db.usuarios.find(                                   // colección
   {autor: {$eq: "Robert Louis Stevenson"}},         // criterio   {autor: {$eq: "Robert Louis Stevenson"}},         // criterio
-  {titulo: 1, descripcion: 1})                      // proyección                                         +  {titulo: 1, descripcion: 1})                      // proyección 
 </code> </code>
  
Línea 287: Línea 301:
 Document documento = new Document("autor", "Robert Louis Stevenson"); Document documento = new Document("autor", "Robert Louis Stevenson");
 FindIterable findIterable = db.getCollection("libros").find(documento); FindIterable findIterable = db.getCollection("libros").find(documento);
-//O también 
-Document libro = db.getCollection("libros").find({autor: "Robert Louis Stevenson"}).first(); 
  
-//Recorrer el conjunto de resultado+//Recorrer el conjunto de resultados
 Iterator<Document> iter = findIterable.iterator(); Iterator<Document> iter = findIterable.iterator();
  
Línea 309: Línea 321:
 </code> </code>
  
 +==== Operaciones de consulta avanzada ====
 Podemos establecer distintos criterios de busqueda Podemos establecer distintos criterios de busqueda
-REVISAR+
  
 En la documentación de mondoDB tenemos un [[http://mongodb.github.io/mongo-java-driver/3.2/driver/getting-started/quick-tour/|tutorial]] con más ejemplos de operaciones En la documentación de mondoDB tenemos un [[http://mongodb.github.io/mongo-java-driver/3.2/driver/getting-started/quick-tour/|tutorial]] con más ejemplos de operaciones
apuntes/mongodb.1549147801.txt.gz · Última modificación: 2024/09/16 16:05 (editor externo)