MongoDB
Instalar MongoDB en linux
$ sudo apt install mongodb
Despues de instalado se crea la carpeta db en la ruta /data, quedando la ruta como /data/db, esta carpeta sera usada por MongoDB
Iniciar el servidor de MongoDB
$ mongod
En este caso se esta especificando el puerto 9000 como el puerto que usara el servidor, la conexión por defecto es mediante el puerto 27017
$ mongod --port 9000
Iniciar la terminal de MongoDB
Para lanzar la interfaz de terminal para interactuar con el servidor de MongoDB se ejecuta el siguiente comando
$ mongo
# Desde un puerto en especifico
$ mongo --port 9000
Mostrar las Bases de Datos existentes
Para mostrar el listado de bases de datos existentes en el servidor, es suficiente con lanzar el comando
$ show dbs
Mostrar la BD en uso
Para saber que BD se esta usando en el momento
$ db
Crear una nueva base de datos
Este comando sirve tanto para crear una nueva Base de Datos como para cambiar entre las Bases de Datos ya existentes
# use <nombre de la Base>
$ use prueba
Teniendo como punto de comparación una BD relacional que trabaja con tablas, las BD no-relacionales trabajan con colecciones.
Las reglas para nombrar una colección son las siguientes * Deben tener un nombre simple * El nombre de la colección debe estar en minúsculas * El nombre de la colección debe ser plural
Creación de una colección
# db.createCollection("nombre_de_la_colección")
$ db.createCollection("students")
Eliminar una colección
# db.nombre_de_la_colección.drop()
$ db.students.drop()
MongoDB usa algunos tipos de datos comunes para almacenar información mediante un formato llamado BSON muy parecido al formato JSON
Los tipos de datos que se pueden usar son los siguientes:
{
string: "Cadena de texto",
int: 404,
double: 3.1316,
boolean: true,
array: [1, 2, 3],
object: {attr1: "attr1", attr2: "attr2"},
date: new Date("<YYYY-mm-dd>"),
object_id: <ObjectID>,
no_value: null,
//Algunos otros tipos de datos
//Timestamp
// Datos Binarios
// Expresiones regulares
// Código JS
}
Insertar un valor en la colección
El método insertOne
solo permite introducir un registro en la colección.
// db.nombre_de_la_colección.insertOne({llave: "valor"})
$ db.students.insertOne({nombre: "Deckon", edad: 29, promedio: 8.8})
Insertar múltiples valores en la colección
Se usa el método insertMany
para introducir en la colección múltiples registros
// db.nombre_de_la_colección.insertMany([
// {llave: "valor"},
// {llave: "valor"}
// ])
$ db.students.insertMany([
{nombre: "nombreUno", edad: 1, promedio: 8},
{nombre: "nombreDos", edad: 2, promedio: 9}
])
Mostrar todos los registros de la colección
Con el método find({})
se especifica que se muestren todos los datos
// db.nombre_de_la_colección.find({})
$ db.students.find({})
{ "_id" : ObjectId("5acab5c681553ea57b72866e"), "nombre" : "Deckon", "edad" : 29, "promedio" : 8.8 }
{ "_id" : ObjectId("5acab5d481553ea57b72866f"), "nombre" : "nombreUno", "edad" : 1, "promedio" : 8 }
{ "_id" : ObjectId("5acab5d481553ea57b728670"), "nombre" : "nombreDos", "edad" : 2, "promedio" : 9 }
Para generar una salida de los datos mas limpia se puede hacer uso del método pretty()
// db.nombre_de_la_colección.find({}).pretty()
$ db.students.find({}).pretty()
lo cual genera una salida como la siguiente
{
"_id" : ObjectId("5acab5c681553ea57b72866e"),
"nombre" : "Deckon",
"edad" : 29,
"promedio" : 8.8
}
{
"_id" : ObjectId("5acab5d481553ea57b72866f"),
"nombre" : "nombreUno",
"edad" : 1,
"promedio" : 8
}
{
"_id" : ObjectId("5acab5d481553ea57b728670"),
"nombre" : "nombreDos",
"edad" : 2,
"promedio" : 9
}
Limitar la salida de resultados
Se puede especificar la cantidad de resultados a mostrar con el método limit()
// db.nombre_de_la_colección.find({}).limit(2).pretty()
$ db.students.find({}).limit(2).pretty()
En este ejemplo se esta limitando la cantidad de resultados unicamente a 2 registros
Ordenar los resultados
Mediante el método sort({})
se puede especificar un orden ascendente o descendente según un campo o múltiples campos
// db.nombre_de_la_colección.find({}).sort({campo: valor}).pretty()
$ db.students.find({}).sort({nombre: 1, edad: -1}).pretty()
Esto nos ordena la salida de forma descendente según el nombre pero también de forma ascendente según la edad
Filtros
Pasándole parámetros llave: valor al método find({})
se le puede indicar un registro especifico a buscar
// db.nombre_de_la_colección.find({llave: valor}).pretty()
$ db.students.find({nombre: "Deckon"}).pretty()
Se pueden seguir pasando parámetros llave: valor para ser aun mas especifico en la búsqueda.
Or
Dentro del método find({})
se puede condicionar el filtro con el condicional or
// db.nombre_de_la_colección.find({$or: [{llave: valor}, {llave: valor}]}).pretty()
$ db.students.find({$or: [{nombre: "Deckon"}, {edad: 2}]}).pretty()
Este consulta devuelve los resultados que tengan de nombre Deckon o que tengan una edad de 2
Comparaciones
Al igual que con $or
se pueden usar otros operadores para comparar y filtrar resultados
Operación | Operador | Acción | Ejemplo |
---|---|---|---|
$or | OR | Uno u otro valor | db.students.find({$or: [{nombre: “Deckon”}, {edad: 2}]}).pretty() |
$eq | = | Compara un valor con otro | db.students.find({ promedio: {$eq: 6} }).pretty() |
$ne | NOT | No igual a | db.students.find({ promedio: {$ne: 6} }).pretty() |
$lt | < | Menor que | db.students.find({ promedio: {$lt: 8} }).pretty() |
$lte | <= | Menor o igual que | db.students.find({ promedio: {$lte: 8} }).pretty() |
$gt | > | Mayor que | db.students.find({ promedio: {$gt: 8} }).pretty() |
$gte | >= | Mayor o igual que | db.students.find({ promedio: {$gte: 8} }).pretty() |
Búsqueda de elementos en una lista
Se puede realizar una búsqueda a partir de elementos que se encuentren dentro de una lista
$ db.students.find({nombre: {$in: ["nombreUno", "nombreDos"]}}).pretty()
Para una búsqueda de elementos que no se encuentren dentro de la lista se usa $nin
$ db.students.find({nombre: {$nin: ["nombreUno", "nombreDos"]}}).pretty()
Búsqueda de campos únicos
Ya que MongoDB es una BD flexible, permite en cualquier momento agregar campos nuevos y únicos pertenecientes a cada registro. Para encontrar esos campos es necesario comprobar su existencia
$ db.students.find({ premio: {$exists: true} }).pretty()
En caso de existir un campo premio, regresa los resultados que contengan dicho campo.
En caso de que el valor dado a $exists
fuese false
, el resultado serian todos los resultados que no contengan dicho campo.
Búsqueda por tipo de dato del campo
Ya que MongoDB es flexible con los campos, puede darse el caso en que el mismo campo tenga diferentes tipos de datos por lo cual se pueden realizar búsquedas por el tipo de dato.
$ db.students.find({ nombre: {$type: 2} }).pretty()
Como se puede observar se pasa el argumento $type:
con el valor 2
, lo cual quiere decir que se busca el tipo de dato cadena de texto. En la documentación de BSON de MongoDB se pueden encontrar el listado de valores correspondientes al tipo de dato Listado de typos de datos BSON
Actualizar
Para actualizar la información de un solo registro se usa el método updateOne
$ db.students.updateOne({promedio: 6}, {$set: {promedio: 6.5}})
Para realizar la actualización pero en múltiples registros se cambia el método updateOne
por updateMany
$ db.students.updateMany({promedio: 6}, {$set: {promedio: 6.5}})
Remplazar
Al igual que la acción de actualizar, este método en vez de actualizar un registro lo sustituye por otro
$ db.students.replaceOne({promedio: 6.5}, {nombre: "otro", edad: 5.5, promedio: 6})
Eliminar
Para eliminar un solo documento se una el método deleteOne
y para múltiples registros deleteMany
, con la misma lógica que la actualización o el remplazo solo se tiene que especificar el filtro para indicar que documentos son los que se van a eliminar.
$ db.students.deleteOne({promedio: 6})
Para eliminar todos los registros de un doucmento se puede realizar con
$ db.students.deleteMany({})