Original article: https://www.freecodecamp.org/news/learn-mongodb-a4ce205e7739/

MongoDB es una rica base de datos NoSQL orientada a documentos.

Si eres un completo principiante en NoSQL, te recomiendo que eches un vistazo rápido a mi artículo sobre NoSQL publicado anteriormente.

Hoy, quería compartir algunas de las cosas básicas acerca de los comandos de MongoDB como la consulta, filtrado de datos, eliminación, actualización y así sucesivamente.

Bueno, basta de charla, ¡manos a la obra!

¿Configuración ?

Para poder trabajar con MongoDB, primero necesita instalar MongoDB en su ordenador. Para ello, visita el centro de descargas oficial y descarga la versión para tu sistema operativo específico. En este caso, he utilizado Windows.

Después de descargar la configuración del servidor de la comunidad MongoDB, pasarás por un proceso de instalación "siguiente tras siguiente". Una vez hecho esto, dirígete a la unidad C en la que has instalado MongoDB. Ve a archivos de programa y selecciona el directorio de MongoDB.

C: -> Program Files -> MongoDB -> Server -> 4.0(version) -> bin

En el directorio bin, encontrará un par de archivos ejecutables interesantes.

  • mongod
  • mongo

Hablemos de estos dos archivos.

mongod significa "Mongo Daemon". mongod es un proceso en segundo plano utilizado por MongoDB. El propósito principal de mongod es gestionar todas las tareas del servidor MongoDB. Por ejemplo, aceptar peticiones, responder al cliente y gestionar la memoria.

mongo es una shell de línea de comandos que puede interactuar con el cliente (por ejemplo, administradores de sistemas y desarrolladores).

Ahora veamos cómo podemos poner en marcha este servidor. Para hacerlo en Windows, primero necesitas crear un par de directorios en tu unidad C. Abre tu símbolo del sistema dentro de tu unidad C y haz lo siguiente:

C:\> mkdir data/dbC:\> cd dataC:\> mkdir db

El propósito de estos directorios es que MongoDB requiere una carpeta para almacenar todos los datos. La ruta por defecto del directorio de datos de MongoDB es /data/db en la unidad. Por tanto, es necesario que proporcionemos esos directorios así.

Si arrancamos el servidor MongoDB sin esos directorios, probablemente veremos el siguiente error:

r04FRmRGqKUaclGh4ZDo3YsMwOlXMVm2T3bJ
trying to start mongodb server without \data\db directories

Después de crear esos dos archivos, dirígete de nuevo a la carpeta bin que tienes en tu directorio mongodb y abre tu shell dentro de ella. Ejecuta el siguiente comando:

mongod

¡Voilà! ¿Nuestro servidor MongoDB ya está en funcionamiento?

Para poder trabajar con este servidor, necesitamos un mediador. Así que abre otra ventana de comandos dentro de la carpeta bind y ejecuta el siguiente comando:

mongo

Después de ejecutar este comando, navega a la shell en la que ejecutamos el comando mongod (que es nuestro servidor). Verás un mensaje de 'conexión aceptada' al final. Eso significa que nuestra instalación y configuración se ha realizado correctamente.

Simplemente, ejecuta en el shell mongo:

db
TK2JGg4JXAj0eG9JBzl89ABEF3JuKAwnw2dx
initially you have a db called ‘test’

Configuración de variables de enterno

Para ahorrar tiempo, puede configurar sus variables de entorno. En Windows, esto se hace siguiendo los siguientes menús:

Advanced System Settings -> Environment Variables -> Path(Under System Variables) -> Edit

¡Simplemente, copia la ruta de nuestra carpeta bin y dale a OK! En mi caso es C:\Program Files\MongoDB\Server\4.0\bin

¡Ahora ya está todo listo!

Trabajar con MongoDB

Hay un montón de GUIs (Interfaz gráfica de usuario / Graphical User Interface) para trabajar con el servidor MongoDB como MongoDB Compass, Studio 3T y así sucesivamente.

Proporcionan una interfaz gráfica para que puedas trabajar fácilmente con tu base de datos y realizar consultas en lugar de usar un intérprete de comandos y escribir las consultas manualmente.

Pero en este artículo vamos a utilizar el símbolo del sistema para hacer nuestro trabajo.

Ahora es el momento de sumergirnos en los comandos de MongoDB que te ayudarán en tus futuros proyectos.

  1. Abre tu símbolo del sistema y escribe mongod para iniciar el servidor MongoDB.
  2. Abre otro intérprete de comandos y escribe mongo para conectarte al servidor de bases de datos MongoDB.

1. Encontra la base de datos en la que te encuentras

db
o6puQoPSpGCW8-AgizHzAv3Qpywtzsgwd26N

Este comando mostrará la base de datos actual en la que se encuentra. test es la base de datos inicial que viene por defecto.

2. Listado de bases de datos

show databases
Q-G8NzP5OAXh0Y3OfdOtqFxlFG-tLErPlPSi

Actualmente tengo cuatro bases de datos. Ellas son: CrudDB, admin, config y local.

3. Ir a una base de datos determinada

use <your_db_name>
UIRueBuX-r6nRXA-qd6Uv95IBd0UbhVvMZtZ

Aquí me he movido a la base de datos local. Puedes comprobarlo si pruebas el comando db para imprimir el nombre de la base de datos actual.

4. Crear una base de datos

Con los RDBMS (sistemas de gestión de bases de datos relacionales) tenemos bases de datos, tablas, filas y columnas.

Pero en las bases de datos NoSQL, como MongoDB, los datos se almacenan en formato BSON (una versión binaria de JSON). Se almacenan en estructuras denominadas "colecciones".

En las bases de datos SQL, éstas son similares a las Tablas.

e7ygVKXaPcqcqCyvurAeUzAbmmREoA6p72V2
oxeGaPqbZ2pmmZx3WcDo8CXIL4J09PbecBWW
SQL terms and NoSQL terms by Victoria Malaya

Muy bien, vamos a hablar de cómo crear una base de datos en el shell mongo.

use <your_db_name>

Espera, ¡ya teníamos este comando antes! ¡¿Por qué lo estoy usando otra vez?!

En el servidor MongoDB, si tu base de datos ya está presente, usando ese comando navegarás a tu base de datos.

Pero si la base de datos no está ya presente, entonces el servidor MongoDB va a crear la base de datos para usted. Entonces, navegará dentro de ella.

Después de crear una nueva base de datos, ejecutar el comando show database no mostrará la base de datos recién creada. Esto se debe a que, hasta que no haya datos (documentos) en ella, no se mostrará en la lista de bases de datos.

5. Crear una colección

Navega a tu base de datos recién creada con el comando use.

En realidad, hay dos formas de crear una colección. Veamos ambas.

Una forma es insertar datos en la colección:

db.myCollection.insert({"name": "john", "age" : 22, "location": "colombo"})

Esto va a crear su colección myCollection incluso si la colección no existe. Luego insertará un documento con el name y la age. Estas son colecciones no tapadas.

La segunda forma se muestra a continuación:

2.1 Crea una colección no tapada

db.createCollection("myCollection")

2.2 Creación de una colección limitada

db.createCollection("mySecondCollection", {capped : true, size : 2, max : 2})

De esta forma, va a crear una colección sin insertar datos.

Una "colección capada" tiene un número máximo de documentos que evita el desbordamiento de documentos.

En este ejemplo, he activado el capping, estableciendo su valor a true.

El size : 2 significa un límite de dos megabytes, y max: 2 establece el número máximo de documentos en dos.

Ahora, si intentas insertar más de dos documentos en mySecondCollection y utilizas el comando find (del que hablaremos en breve), sólo verás los documentos insertados más recientemente. Ten en cuenta que esto no significa que el primer documento haya sido borrado - simplemente no se muestra.

6. Inserción de datos

Podemos insertar datos en una nueva colección, o en una colección que se haya creado anteriormente.

uO4agHbI85kMJrQmF1L9pMmhn0WcgngmoPsI
ways data can be stored in a JSON

Existen tres métodos para insertar datos.

  1. insertOne() se utiliza para insertar un solo documento.
  2. insertMany() se utiliza para insertar más de un documento.
  3. insert() se utiliza para insertar tantos documentos como se desee.

A continuación se muestran algunos ejemplos:

  • insertOne()
db.myCollection.insertOne(
  {
    "name": "navindu", 
    "age": 22
  }
)
  • insertMany()
db.myCollection.insertMany([
  {
    "name": "navindu", 
    "age": 22
  },
  {
    "name": "kavindu", 
    "age": 20
  },

  {
    "name": "john doe", 
    "age": 25,
    "location": "colombo"
  }
])

El método insert() es similar al método insertMany().

Además, observe que hemos insertado una nueva propiedad llamada location en el documento para John Doe. Así que si usas find, entonces verás que sólo para john doe se adjunta la propiedad location.

Esto puede ser una ventaja cuando se trata de bases de datos NoSQL como MongoDB. Permite la escalabilidad.

QyCgwWUHWoporNunUvoRgdVry-x0QyA8qSxd
Successfully inserted data

7. Consulta de datos

A continuación se explica cómo consultar todos los datos:

db.myCollection.find()
rzcViLqDrTy5gqSFoY6n3N7dciNxFTY62eRL
result

Si deseas ver estos datos de una manera más limpia, sólo tienes que añadir .pretty() al final de la misma. Esto mostrará el documento en formato JSON bastante impreso.

db.myCollection.find().pretty()
gMIbpNqjr9jmJ3YVDZruX1skX0PCvSruuZWB
resultado

Espera... ¿En estos ejemplos te has fijado en algo como _id? ¿Cómo ha llegado ahí?

Bueno, cada vez que insertas un documento, MongoDB añade automáticamente un campo _id que identifica de forma única cada documento. Si no quieres que se muestre, simplemente ejecuta el siguiente comando

db.myCollection.find({}, _id: 0).pretty()

A continuación, veremos cómo filtrar los datos.

Si desea visualizar algún documento concreto, puede especificar un único detalle del documento que desea que se muestre

db.myCollection.find(
  {
    name: "john"
  }
)
TiBBNNp9gmxtPXaHd5BSZ7MkSrv1JkRzkMI1
result

Supongamos que desea mostrar sólo las personas cuya edad es inferior a 25 años. Puede utilizar $lt para filtrar.

db.myCollection.find(
  {
    age : {$lt : 25}
  }
)

Del mismo modo, $gt significa mayor que, $lte es "menor o igual que", $gte es "mayor o igual que" y $ne es "no igual".

8. Actualización de documentos

Supongamos que desea actualizar la dirección o la edad de alguien, ¿cómo podría hacerlo? Bueno, vea el siguiente ejemplo:

db.myCollection.update({age : 20}, {$set: {age: 23}})

El primer argumento es el campo del documento que desea actualizar. Aquí, especifico la age para la simplicidad. En el entorno de producción, se podría utilizar algo así como el campo _id.

Siempre es mejor utilizar algo como _id para actualizar una fila única. Esto se debe a que varios campos pueden tener la misma age y el mismo name. Por lo tanto, si actualizas una única fila, afectará a todas las filas que tengan el mismo nombre y edad.

qQH53vM6-peOzS-z9k5YjMoS9R2z1APJrXvB
result

Si actualizas un documento de esta manera con una nueva propiedad, digamos location por ejemplo, el documento se actualizará con el nuevo atributo. Y si haces find, entonces el resultado será:

YqJpPAw7d5NPSTzStCevUmgoDTm6FkgPLZ-7
result

Si necesitas eliminar una propiedad de un único documento, podrías hacer algo como esto (digamos que quieres que desaparezca age):

db.myCollection.update({name: "navindu"}, {$unset: age});

9. Eliminar un documento

Como he mencionado antes, al actualizar o eliminar un documento, sólo tienes que especificar el _id no sólo name, age, location.

db.myCollection.remove({name: "navindu"});

10. Eliminar una colección

db.myCollection.remove({});

Nota, esto no es igual al método drop(). La diferencia es que drop() se utiliza para eliminar todos los documentos dentro de una colección, pero el método remove() se utiliza para eliminar todos los documentos junto con la propia colección.

Operadores lógicos

MongoDB proporciona operadores lógicos. La siguiente imagen resume los diferentes tipos de operadores lógicos.

xO27jGeclafiAUt0a0VYRifhDpISvZcIkhRD
VsHbrchxUETWqCFhZc6QvmSPUdrbfOHYEH3L
referencia: Manual de MongoD

Supongamos que deseas mostrar las personas cuya edad es inferior a 25 años y cuya localidad es Colombo. ¿Qué podríamos hacer?

¡Podemos utilizar el operador $and!

db.myCollection.find({$and:[{age : {$lt : 25}}, {location: "colombo"}]});

Por último, pero no por ello menos importante, hablemos de la agregación.

Agregación

Un rápido recordatorio de lo que aprendimos sobre las funciones de agregación en las bases de datos SQL:

JHcuA7YLBiFiCBn1QiOS8NYCUELbGg-LKDSN
aggregation functions in SQL databases. ref : Tutorial Gateway

En pocas palabras, la agregación agrupa valores de varios documentos y los resume de alguna manera.

Imaginemos que tenemos estudiantes de ambos sexos en una colección recordBook y queremos un recuento total de cada uno de ellos. Para obtener la suma de hombres y mujeres, podríamos utilizar la función de agregación $group.

db.recordBook.aggregate([
  {
    $group : {_id : "$gender", result: {$sum: 1}}
  }  
]);
NeK7Wx3lQ1AaUhGD1VERqmaluAl9qrsXpDMs
resultado

Conclusión

Así, hemos discutido los fundamentos de MongoDB que podrías necesitar en el futuro para construir una aplicación. Espero que hayas disfrutado de este artículo, ¡gracias por leerlo!

Si tienes alguna duda con respecto a este tutorial, ponte en contacto conmigo en Facebook o Twitter o Instagram.

¡Nos vemos en el próximo artículo! ❤️ ✌?