apuntes:mongodb
Diferencias
Muestra las diferencias entre dos versiones de la página.
| apuntes:mongodb [2019/02/02 22:40] – [Relaciones entre documentos] fernando | apuntes: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 | + | Con el potente crecimiento |
| - | Pero con el potente crecimiento | + | Viendo que los tradicionales SGBD Relacionales emplean demasiado tiempo en controlar la consistencia |
| - | Viendo que los tradicionales SGBD Relacionales empleaban demasiado tiempo en controlar la consistencia | + | Se caracterizan por no emplear SQL como lenguaje principal |
| + | * bbdd clave-valor | ||
| + | * bbdd de Documentos | ||
| + | * bbdd orientadas a objetos | ||
| + | * bbdd en grafo | ||
| ===== MongoDB ===== | ===== MongoDB ===== | ||
| ==== ¿Qué es MongoDB? ==== | ==== ¿Qué es MongoDB? ==== | ||
| - | [[http:// | + | [[http:// |
| La principal diferencia con los tradicionales sistemas relacionales, | La principal diferencia con los tradicionales sistemas relacionales, | ||
| ==== 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 y como se muestra en la siguiente | + | 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 |
| {{ jsondocument.png }} | {{ jsondocument.png }} | ||
| - | > Documento BSON en MongoDB | + | > Estructura |
| - | 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, | + | Así, el esquema en MongoDB es totalmente flexible puesto que depende solamente del documento insertado, **pudiendo tener cada documento distinta cantidad |
| ^SGBD Relacional^ MongoDB^ | ^SGBD Relacional^ MongoDB^ | ||
| Línea 30: | Línea 33: | ||
| ==== Documentos BSON ==== | ==== Documentos BSON ==== | ||
| - | BSON es una representación | + | BSON es una representación |
| - | 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 // | + | Estos documentos de texto son ligeros y utilizan una cláve única por cada documento (campo _id). Cada documento |
| === 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 '' | 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 '' | ||
| - | El tipo de datos '' | + | El tipo de datos '' |
| ===== Puesta en marcha de MongoDB ===== | ===== Puesta en marcha de MongoDB ===== | ||
| Una vez descargado el servidor [[http:// | Una vez descargado el servidor [[http:// | ||
| Línea 59: | Línea 62: | ||
| {{ : | {{ : | ||
| - | MongoDB también incluye su propio cliente GUI para administrar las bases de datos. Se llama [[https:// | + | MongoDB también incluye su propio cliente GUI para administrar las bases de datos. Se llama [[https:// |
| {{ : | {{ : | ||
| - | Además, //MongoDB// dispone de una consola cliente que podemos lanzar ejecutando el comando '' | + | Además, // |
| * 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(" | + | //O si quiero abrir conexiones con un servidor remoto |
| + | MongoClient mongoClient = new MongoClient( " | ||
| + | |||
| + | // | ||
| + | MongoDatabase db = mongoClient.getDatabase(" | ||
| //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 | + | Debemos asegurarnos |
| <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:// | + | MongoDB proporciona varias vías para ejecutar cada una de las operaciones CRUD ((https:// |
| + | |||
| + | En java los documentos | ||
| === Operaciones de inserción=== | === Operaciones de inserción=== | ||
| Línea 207: | Línea 216: | ||
| === Operaciones de modificacion === | === Operaciones de modificacion === | ||
| - | * // | + | * // |
| - | * // | + | * // |
| - | * // | + | * // |
| Ejemplo desde consola | Ejemplo desde consola | ||
| Línea 253: | Línea 263: | ||
| <code java> | <code java> | ||
| - | db.getCollection(" | + | //Para borrar un solo documento debemos utilizar un valor para un campo único (_id) |
| + | db.getCollection(" | ||
| + | |||
| + | db.getCollection(" | ||
| </ | </ | ||
| Línea 265: | Línea 279: | ||
| db.usuarios.find( | db.usuarios.find( | ||
| {autor: {$eq: " | {autor: {$eq: " | ||
| - | {titulo: 1, descripcion: | + | {titulo: 1, descripcion: |
| </ | </ | ||
| Línea 281: | Línea 295: | ||
| Document documento = new Document(" | Document documento = new Document(" | ||
| Document libro = db.getCollection(" | Document libro = db.getCollection(" | ||
| + | //O también | ||
| + | Document libro = db.getCollection(" | ||
| //Buscar todos los libros de un autor concreto | //Buscar todos los libros de un autor concreto | ||
| Línea 286: | Línea 302: | ||
| FindIterable findIterable = db.getCollection(" | FindIterable findIterable = db.getCollection(" | ||
| - | //Recorrer el conjunto de resultado | + | //Recorrer el conjunto de resultados |
| Iterator< | Iterator< | ||
| Línea 305: | Línea 321: | ||
| </ | </ | ||
| + | ==== 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:// | En la documentación de mondoDB tenemos un [[http:// | ||
| Línea 319: | Línea 336: | ||
| Para ver los siguientes ejemplos vamos a plantear dos tipos de documentos: // | Para ver los siguientes ejemplos vamos a plantear dos tipos de documentos: // | ||
| ==== Relaciones Enbedding ==== | ==== Relaciones Enbedding ==== | ||
| - | Este patrón se usa cuando necesitamos acceder a los elementos | + | Este patrón se usa cuando necesitamos acceder a los empleados |
| - | Favorece la consulta de los documentos | + | |
| {{ : | {{ : | ||
| === Relaciones 1 a 1 === | === Relaciones 1 a 1 === | ||
| - | En uno de los dos documentos, integramos | + | En el documento |
| <code java> | <code java> | ||
| { | { | ||
| Línea 330: | Línea 346: | ||
| | | ||
| | | ||
| - | direccion: { | + | departamento: { |
| calle: "123 Fake Street", | calle: "123 Fake Street", | ||
| ciudad: " | ciudad: " | ||
| Línea 341: | Línea 357: | ||
| === Relaciones 1 a N (pocos) === | === Relaciones 1 a N (pocos) === | ||
| - | Cuando cada documento | + | Cuando cada empleado |
| <code java> | <code java> | ||
| Línea 348: | Línea 364: | ||
| | | ||
| | | ||
| - | direcciones: [ | + | departamentos: [ |
| { | { | ||
| calle: "123 Fake Street", | calle: "123 Fake Street", | ||
| Línea 366: | Línea 382: | ||
| ==== Relaciones Referencing ==== | ==== Relaciones Referencing ==== | ||
| - | Consisten en almacenar en un documento un campo con el valor del _id de otro o varios documentos. Se utiliza cuando queremos acceder de forma directa a los unos documentos, y a los documentos | + | Consisten en almacenar en un documento un campo con el valor del _id de otro o varios documentos. Se utiliza cuando queremos acceder de forma directa a los empleados, pero tambien directamente |
| {{ : | {{ : | ||
| Línea 372: | Línea 388: | ||
| === Relaciones 1 a N (varios) === | === Relaciones 1 a N (varios) === | ||
| <code java> | <code java> | ||
| - | //Documento empleado | + | //Documento empleado, guarda las referencias a varios departamentos |
| { | { | ||
| _id: ObjectID(" | _id: ObjectID(" | ||
| | | ||
| | | ||
| - | direcciones: [ ObjectID(" | + | departamentos: [ ObjectID(" |
| } | } | ||
| - | // | + | // |
| { | { | ||
| _id: ObjectId(" | _id: ObjectId(" | ||
| Línea 399: | Línea 415: | ||
| </ | </ | ||
| - | La ventaja de este planteamiento es que ademas permite una relacion | + | La ventaja de este planteamiento es que ademas permite una relación |
| === Relaciones 1 a N (gran volumen) === | === Relaciones 1 a N (gran volumen) === | ||
| - | Se emplean cuando un documento | + | Se emplean cuando un empleado |
| <code java> | <code java> | ||
| Línea 412: | Línea 428: | ||
| } | } | ||
| - | // | + | // |
| { | { | ||
| _id: ObjectId(" | _id: ObjectId(" | ||
| Línea 419: | Línea 435: | ||
| | | ||
| cp: " | cp: " | ||
| - | | + | |
| } | } | ||
| Línea 428: | Línea 444: | ||
| | | ||
| cp: " | cp: " | ||
| - | | + | |
| } | } | ||
apuntes/mongodb.1549147205.txt.gz · Última modificación: (editor externo)
