MongoDB es una base de datos NoSQL de documentos que ofrece una gran escalabilidad y flexibilidad, y un modelo de consultas e indexación avanzado, esto quiere decir que en lugar de guardar los datos en registros, guarda los datos en documentos, estos documentos son almacenados en BSON, que es una representación binaria de JSON.
Instalación con Docker
docker run --name some-mongo -d mongo:3.6.22-xenial
docker ps | grep "mongo"
Acceder al contenedor
docker exec -it mongo /bin/bash
root@5ccbbaf9e457:/# mongo
MongoDB shell version v3.6.22
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("f2614143-9aed-40d7-a9b0-5db870a662b6") }
MongoDB server version: 3.6.22
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2020-01-18T02:38:28.718+0000 I STORAGE [initandlisten]
2020-01-18T02:38:28.718+0000 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2020-01-18T02:38:28.718+0000 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2020-01-18T02:38:30.238+0000 I CONTROL [initandlisten]
2020-01-18T02:38:30.238+0000 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2020-01-18T02:38:30.238+0000 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2020-01-18T02:38:30.238+0000 I CONTROL [initandlisten]
Listar Bases de datos
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
Son muchas las operaciones que se pueden hacer en MongoDB, entre las mas esenciales son insertar, obtener, actualizar y eliminar un documento.
Supongamos que nuestro esquema en la base de datos se llama cmr y tenemos una colección personas para almacenar nuestros documentos, antes de iniciar nuestra operaciones deberemos el esquema donde queremos trabajar.
use cmr
Insertar documentos
Para insertar un nuevo documento, ejecutaremos la instrucción *insert* sobre la colección, indicando los atributos que componen el documento de la siguiente forma:
db.personas.insert({ })
> db.personas.insert({ nombre : "Jorge", Apellidos : "Rodriguez", genero : "M" })
WriteResult({ "nInserted" : 1 })
> db.personas.insert({ nombre : "Angela", Apellidos : "Baca", genero : "F" })
WriteResult({ "nInserted" : 1 })
Consultar documentos
Para buscar documentos utilizamos la operación *find* combinándola con una serie de operadores que permiten configurar el filtro de búsqueda.
db.personas.find({ })
> db.personas.find({ })
{ "_id" : ObjectId("602dd7c5160562c0f7c98333"), "nombre" : "Jorge", "Apellidos" : "Rodriguez", "genero" : "M" }
{ "_id" : ObjectId("602dd7d9160562c0f7c98334"), "nombre" : "Angela", "Apellidos" : "Baca", "genero" : "F" }
> db.personas.find({ genero : "M" })
{ "_id" : ObjectId("602dd7c5160562c0f7c98333"), "nombre" : "Jorge", "Apellidos" : "Rodriguez", "genero" : "M" }
Actualizar documentos
Para actualizar un documento, ejecutaremos la instrucción *update* sobre la colección.
db.personas.update({ })
> db.personas.update({ nombre : "Jorge"}, { $set : {Apellidos : "Rodriguez Flores"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.personas.find({ })
{ "_id" : ObjectId("602dd7c5160562c0f7c98333"), "nombre" : "Jorge", "Apellidos" : "Rodriguez Flores", "genero" : "M" }
{ "_id" : ObjectId("602dd7d9160562c0f7c98334"), "nombre" : "Angela", "Apellidos" : "Baca", "genero" : "F" }
Eliminar documentos
Para eliminar un conjunto de documentos de una colección, ejecutaremos la instrucción *remove* indicando el filtro que deben cumplir todos aquellos documentos que queramos eliminar:
db.personas.update({ })
> db.personas.remove({ nombre : "Jorge"})
WriteResult({ "nRemoved" : 1 })
> db.personas.find({ })
{ "_id" : ObjectId("602dd7d9160562c0f7c98334"), "nombre" : "Angela", "Apellidos" : "Baca", "genero" : "F" }
A partir de la versión 3.2, aunque la operación remove se puede seguir utilizando, existen otras dos instrucciones para eliminar un sólo documento (deleteOne) o eliminar de forma múltiple (deleteMany).