Comandos para la administración de Bases de Datos NoSQL con Mongo
Tags: database, nosql, beginners, mongodb
Published: 2022-09-18 20:16:30

## ¿Qué es?
Una base de datos es un espacio en donde podemos guardar los datos de usuarios, estadísticas, precios, productos, etc. Existen diferentes modelos que se pueden adoptar dependiendo del tipo de aplicación que se desee generar.
Decir que una base de datos es NoSQL se refiere a que no es relacional, están basadas en documentos y su esquema ágil permite procesar rápidamente datos sin estructura y que requieren iteraciones rápidas.


## Operadores de comparacion en Mongo
**$eq** - Igual a
**$ne** - Diferente a 
**$gt** - Mayor a
**$gte** - Mayor o igual a
**$lt** - Menor a
**$lte** - Menor o igual a
**$in** - Valores dentro de un array
**$nin** - Valores que no estén dentro de un array


## Operadores lógicos
**$or** - Filtra  los documentos que cumplan con una condición u otra.
**$and** - Filtra los documentos que cumplan con todas las condiciones.
**$not** - Filtra los documentos que no coincidan con la condición.
`{field: {$not : {condition}}}`


## Comandos para un CRUD
Create: insert y save.
Read: find y pretty.
Update: update, multi y upsert.
Delete: remove.


## Comandos básicos
**show dbs** - Comando para ver las bases de datos existentes.
**use miBD** - Usar la base de datos 'miDB' o crearla si no existe.
**db** - Ver en cuál BD estamos.
**db.createCollection("miColeccion")** - Crear una colección.
**show collections** - Ver la lista de colecciones existentes.
**db.miColeccion.drop()** - Elimina la colección.
**db.dropDatabase()** - Elimina toda la base de datos.



## Insertar documentos
**db.miColeccion.insertOne({"campo":"valor","campo":"valor"})** - Insertar un documento.
**db.miColeccion.insertMany([{...}, {...}, {...}])** - Insertar varios documentos.
**db.miColeccion.save({_id:1, "campo": "valor", "campo": "valor"})** - Es otra forma de guardar un documento. El campo '_id' es opcional y no genera duplicidad si hay dos ID iguales.


## Actualizar documentos
**db.miColeccion.update({campoID:"valor"}, {campo:"valor"})** - Actualiza los datos que especifiquemos, dado el documento a editar (campoID).


## Eliminar documentos
**db.miColeccion.remove({_id: 1})** - Elimina el documento con el ID especificado.


## Filtrar documentos
**db.miColeccion.find()** - Ver los documentos almacenados.
**db.miColeccion.find().pretty()** - Ver los documentos almacenados de manera legible.
**db.miColeccion.find({"campo": "valor"}).pretty()** - Devuelve el documento que coincida con el campo/valor que especificamos, con un formato legible.
**db.miColeccion.find({},{campo1:1, campo2:2, _id:0})** - Retorna todos los documentos pero solo muestra los campos especificados.
**db.miColeccion.find().pretty({campo:-1})** - Mostrar los registros ordenados por 'campo'. Ascendente: 1, descendente: -1.
**db.miColeccion.find({campo: {$gte: new Date(1970,1,1)}})** - Filtra 'campo' a partir de la fecha especificada (1970).


## Documento JS en Mongo
**load("C://ruta/del/archivo.js")** - Carga el archivo JS y lo ejecuta.

## ¿Cómo escribir un documento JS para ejecutar en Mongo?
**db = db.getSiblingDB('miBD')** - Este comando es equivalente a 'use', sirve para elegir la base de datos que queremos usar.
**db.adminCommand('listDatabases')** - Es el equivalente a show dbs.
**db.getCollectionNames()** - Nos mostrará los nombres de las colecciones existentes.
**db.getUsers()** - Retorna los usuarios.
**db.getRoles({showBuiltinRoles: true})** - Este comando muestra los roles y los permisos configurados.
**db.adminCommand({'getLog': ''})** - Muestra los logs.
**cursor = db.miColeccion.find()** - Asigna los documentos registrados a 'cursor'.
**while(cursor.hasNext()) { printjson(cursor.next()); }** - Recorrer los documentos e imprimirlos con un formato JSON.