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: 2024/09/16 16:05 (editor externo)