MongoDb
[Link]
Introducción
¿Qué es MongoDb?
MongoDb es una base de datos NoSQL orientada a documentos, utilizando BSON el cual es una
representación binaria del formato JSON. Es altamente escalable, de alto rendimiento y código
abierto. Al igual que la mayoría de las bases de datos NoSQL, MongoDb no posee un esquema
rígido para el almacenamiento. No tener un esquema rígido significa que la estructura de un
documento puede ser muy diferente de la estructura de otro documento almacenado en la
misma colección.
Introducción
¿Qué ventajas obtenemos al utilizar MongoDb?
La respuesta a esta pregunta no es sencilla ni directa. La misma depende principalmente del uso que se
le va a dar a la base de datos, es decir cual es la finalidad de la información almacenada en dicha base de
datos.
El uso de la base la base de datos, nos va a proporcionar una guía si MongoDb es la solución más
apropiada o no, para ellos debemos tener en cuenta algunos requerimientos:
● Disponibilidad.
● Escalabilidad.
● Esquema estable o no.
● Necesidad de transacciones.
● Tasa de respuesta.
● Uso de los datos.
Introducción
Características de MongoDB.
● No posee esquema definido.
● Escalabilidad horizontal.
● Orientado a velocidad de respuesta.
● Soporta fragmentación y replicación (Sharding).
● No soporta transacciones.
● Indexación.
Estructura de MongoDb
Base de datos.
● Una base de datos es un conjunto de colecciones de documentos.
● No existen relaciones entre las colecciones. Es decir la base de datos no controla la
integridad de los datos. No existe el concepto de clave foránea.
Colecciones.
● Son un conjunto de documentos.
● Se puede establecer una analogía entre las colecciones y las tablas de una base de datos
relacional.
Conectando a MongoDb
Utilizando el shell
C:\>%MONGO%\mongo "mongodb://localhost:27017"
(En este caso nos estamos conectando a mongodb sin especificar a qué base de datos)
C:\>%MONGO%\mongo "mongodb://localhost:27017/ejemplo"
(En este caso nos estamos conectando a mongodb especificando la base de datos, la misma debe
existir)
Conectando a MongoDb
Utilizando MongoDb Compass.
Conectando a MongoDb
Usando MongoDb Compass
Creación de una base de datos.
Creando una base de datos utilizando el shell de mongo.
c:\>%MONGO%\mongo
>show dbs (es un comando que permite listar las bases de datos disponible en la instancia a la cual nos estamos
conectando)
>use miBase
Nota: si la base no existe se crea, en caso de ya existir solamente la pone en uso y desde ese momento ya se encuentra
disponible para trabajar con la misma.
switched to db miBase
Trabajando con MongoDb
Crear una colección usando el shell.
>[Link]({x: 1})
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8105d6bc3df0ade6be82ad")
}
Nota: si la colección no existe, la misma es creada.
Trabajando con MongoDb
Creando una colección utilizando MongoDb Compass:
Trabajando con MongoDb
Insertando documentos.
Trabajando con MongoDb
Insertando documentos.
> [Link]({x: 10, y: 10, value: "valor"})
> [Link]([
... {x: 20, value: "valor-20"},
... {y: 15, value: "valor-15"}])
Trabajando con MongoDb
Buscando documentos en una colección.
Trabajando con MongoDb
Buscando documentos en una colección.
Trabajando con MongoDb
Buscando documentos.
Trabajando con MongoDb
Buscando documentos.
> [Link].find({})
{ "_id" : ObjectId("5e8105d6bc3df0ade6be82ad"), "x" : 1 }
{ "_id" : ObjectId("5e810c1abc3df0ade6be82af"), "x" : 20, "value" : "valor-20" }
{ "_id" : ObjectId("5e810c1abc3df0ade6be82b0"), "y" : 15, "value" : "valor-15" }
> [Link].find({x:20})
{ "_id" : ObjectId("5e810c1abc3df0ade6be82af"), "x" : 20, "value" : "valor-20" }
> [Link].find({}).limit(2)
{ "_id" : ObjectId("5e8105d6bc3df0ade6be82ad"), "x" : 1 }
{ "_id" : ObjectId("5e810c1abc3df0ade6be82af"), "x" : 20, "value" : "valor-20"
Trabajando con MongoDb
Actualizando documentos.
Trabajando con MongoDb
Actualizando documentos.
Trabajando con MongoDb
Actualizando documentos.
Trabajando con MongoDb
Actualizando un documento.
> [Link](
... { item: "paper" },
... {
... $set: { "[Link]": "cm", status: "P" },
... $currentDate: { lastModified: true }
... }
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
Trabajando con MongoDb
Actualizando multiples documentos.
> [Link](
... { "qty": { $lt: 50 } },
... {
... $set: { "[Link]": "in", status: "P" },
... $currentDate: { lastModified: true }
... }
... )
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
Trabajando con MongoDb
Reemplazando un documento.
> [Link](
... { item: "paper" },
... { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
Trabajando con MongoDb
Borrando documentos.
Trabajando con MongoDb
Borrando todos los documentos.
> [Link]({})
{ "acknowledged" : true, "deletedCount" : 10 }
Borrando documentos que cumplen con una condición.
> [Link]({ status : "A" })
{ "acknowledged" : true, "deletedCount" : 2 }
Borrando un documento que cumple con una condición.
> [Link]( { status: "D" } )
{ "acknowledged" : true, "deletedCount" : 1 }
Trabajando con MongoDb
Comportamiento de las operaciones CRUD.
● Campo _id: cada documento almacenado en una colección necesita un identificador único.
● Atomicidad: todas las operaciones de escritura en MongoDb son atómicas a nivel de
documento.
● El método find() retorna un cursor a los documentos que selecciona.
● No se puede cambiar el valor del campo _id reemplazando un documento existente por
otro con un campo _id distinto.
● Orden de los campos:
○ El orden de los campos se mantiene en MongoDb después de las operaciones de escritura.
○ El campo _id es siempre el primer campo.
○ El renombrado de los campos puede ocasionar que se cambie el orden los mismos.
● Opción Upsert: si el documento no existe y la opción está especificada en true el o los
documentos son insertados.
● Incluso si se borran todos los documentos, los índices no son borrados.
Trabajando con MongoDb