MongoDB (derivado del inglés humongous, „gigantesco“) es una base de datos NoSQL orientada a documentos escrita en el lenguaje de programación C++. Al ser orientada a documentos, puede gestionar colecciones de documentos similares a JSON. De este modo, muchas aplicaciones pueden modelar datos de forma más natural, ya que los datos pueden anidarse en jerarquías complejas, pero siguen siendo consultables e indexables. [Wikipedia]
Con el siguiente comando se puede iniciar el servidor de MongoDB. Sin embargo, primero debe crearse la siguiente carpeta: C:\data\db. Aquí se almacenan los datos de la BD.
mongod
Con el siguiente comando se puede cambiar la carpeta predeterminada:
mongod –path “…..”
La siguiente página muestra un resumen de los parámetros con los que se puede iniciar el servidor, p. ej. mongod -f mongod.cfg

Con ‘use mydb’ se establece una conexión con la base de datos ‘mydb’. En caso de que la base de datos no exista, se creará.
Con ‘db,user.insertOne(…..)’ se genera un nuevo documento (colección). Mongo genera un ID único para el registro.
Con ‘db.user.find()’ se muestran todos los registros de la colección ‘user’.


‘show dbs’ funciona también.

El anidamiento se puede realizar hasta una profundidad de 100. El tamaño máximo de un documento es de 16 MB por documento.
Operaciones de creación
- db.collection.insertOne()
- db.collection.insertMany()
Operaciones de lectura
- db.collection.find() p. ej. db.user.find({age: {$gt: 43}})
Operaciones de actualización
- db.collection.updateOne()
- db.collection.updateMany() p. ej. updateMany({}, email: “test@test.com”)
- db.collection.replaceOne()
Operaciones de eliminación
- db.collection.deleteOne()
- db.collection.deleteMany() p. ej. deleteMany({})
$gt es un operador. Esta vista general muestra cómo se pueden usar los operadores. Para ser más precisos, se trata de un operador de ‘Query and Projection’.
MongoDB distingue 5 grupos de operadores diferentes.
La shell se comunica con el servidor de MongoDB. Este envía la solicitud o el registro que hemos introducido al ‘Storage Engine’, que se encarga de procesar los datos. La ‘Engine’ almacenará los datos dentro de la BD y en parte también los mantendrá en memoria para un acceso rápido. La ‘Engine’ puede sustituirse por otra si es necesario. ‘WiredTiger’ es la engine predeterminada. El almacenamiento no se realiza en forma de JSON sino como BSON (Binary JSON), un archivo binario.

MongoDB ofrece con Compass la posibilidad de acceder a la base de datos mediante UI.

Un archivo JSON se puede importar en la base de datos de la siguiente manera. En este caso, importo un informe del departamento de policía sobre los más diversos crímenes en EE.UU. desde 2003 hasta 2018:
mongoimport.exe incidents_14mb.json -d mydb -c sfgov –jsonArray
‘mydb’ es la base de datos y ‘sfgov’ la colección. Se importó una colección con 41.075 documentos.

Lo hice un poco más sencillo y exporté el conjunto de datos JSON ’example’ existente desde dremio.

Dentro de los datos podemos buscar, por ejemplo, robos con el siguiente comando:
db.sfgov.find({ “Category”:{$eq: “ROBBERY”} })

He mostrado la visualización de los robos por puro interés en tableau:

Con el siguiente comando podemos obtener información detallada de la consulta:
db.sfgov.explain(“executionStats”).find({ “Category”:{$eq: “ROBBERY”} })
Entre otras cosas, aquí se muestra cuánto tiempo ha tardado la ejecución de la consulta:

Para aumentar la velocidad de la consulta, podemos generar un índice para la columna deseada. En este ejemplo creo un índice para la categoría:
db.sfgov.createIndex({“Category”: 1})
Un índice se puede eliminar con el siguiente comando:
db.sfgov.createIndex({“Category”: 1})

Al volver a consultar la información de la consulta, vemos que la velocidad de procesamiento ha mejorado un 59%:

Para agregar algo más de seguridad en el futuro, crearemos primero un usuario ‘admin’:

El usuario se puede eliminar de la siguiente manera:
db.runCommand( { dropUser: “root” } )
Luego, hay que detener el servidor:
db.shutdownServer()
exit
El servidor debe iniciarse con el parámetro –auth para que el usuario tenga que autenticarse ante el servidor de BD:
mongod –auth
o
mongod –auth –port 27017 –dbpath C:\data\db
Ya no se pueden consultar las informaciones sin autenticación:

También existe la posibilidad de activar la autenticación permanentemente en el archivo de configuración de MongoDB ‘C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg’:

A continuación, el acceso solo se podrá realizar con un usuario que tenga los permisos correspondientes. El usuario se puede crear de la siguiente manera:
La autenticación se realiza de la siguiente manera:
mongo -u “root” -p “root” –authenticationDatabase “admin”

Para asegurar la transmisión se puede usar SSL. El archivo *.pem necesario se puede crear de la siguiente manera. Como ‘Common Name’ debe indicarse la dirección del servidor:
openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes -out
C:\ssl\mongodb.crt -keyout C:\ssl\mongodb.key

Generación del archivo *.pem:
type C:\ssl\mongodb.crt C:\ssl\mongodb.key > C:\ssl\mongodb.pem

El servidor se puede iniciar a continuación con el siguiente comando:
mongod –sslMode requireSSL –sslPEMKeyFile C:\ssl\mongodb.pem
Para eliminar la conexión existente de MongoDB, se puede ejecutar el siguiente comando:
db.shutdownServer()
La conexión al servidor se puede establecer a continuación de la siguiente manera:
mongo -ssl -sslCAFile C:\ssl\mongodb.pem –host localhost
Con Atlas tenemos la posibilidad de utilizar MongoDB como servicio. Aquí optaré por AWS.


Crear admin de Atlas:

Restringir acceso a la propia IP:

El popup muestra los pasos restantes:

Establecer conexión vía shell:



…..
