Consultas básicas en MongoDB por terminal
Tags: mongodb, terminal, consultas
Published: 2021-02-05 18:59:00

Si eres de las personas que no les gusta usar los distintos programas que hay para el manejo de las base de datos o simplemente quieres saber cómo manejarte por consola, aquí puedes ver algunos ejemplos de consultas básicas.

Para entrar en la terminal de MongoDB ejecuta en tu terminal mongo o mongod.

Si aparece algo similar a lo siguiente, entonces todo está correcto.

```
MongoDB shell version v4.0.11
connecting to: tu_mongo_uri
Implicit session: session { "id" : UUID("tu_mongo_id") }
MongoDB server version: 4.0.11
```

Una vez dentro, puedes ejecutar el siguiente comando usando la palabra `show` para ver todas tus bases de datos:

```
> show databases 
```
o puedes abreviarlo
```
> show dbs
```
Este comando mostrará un listado de bases de datos con los GB que ocupan.

Para poder ejecutar cualquier consulta tienes que seleccionar la base de datos sobre la que quieres realizar dicha consulta. Con la palabra `use` ejecuta:
```
> use nombre_db
```
Este comando no muestra nada, pero ya le estás diciendo a mongo que quieres usar esa base de datos. Al igual que el comando `> show dbs` que muestra las bases de datos, existe uno parecido para mostrar todas las tablas:
```
> show tables
```
o también 
```
> show collections
```

Ahora hay que seleccionar la tabla o colección para poder realizar operaciones sobre ella. Para ello se usa la misma sentencia que para seleccionar una base de datos pero poniendo el nombre de nuestra tabla.

Una vez seleccionada ya podemos hacer consultas sobre ella.

### Operaciones CRUD :computer:
#### Find (:eyes:)
La primera consulta es la más sencilla, recoger todos los documentos de la tabla o colección. Ejecutamos lo siguiente:

```
> db.mascotas.find()
```
Si queremos encontrar un documento específico filtrando por algún campo, cambiaremos `find()` por `findOne()` y dentro del paréntesis se pone el filtro que queremos. Como por ejemplo: 

```
> db.mascotas.findOne({nombre: "Enki"})
```

#### Create :heavy_plus_sign:
Para crear un nuevo registro en nuestra base de datos usamos el método `save()` y dentro de sus paréntesis ponemos los datos coincidiendo con el modelo de datos. Ejemplo: 
```
> db.mascotas.save({"nombre":"Duna", "especie":"Felino", "sexo":"Hembra", "edad":1, "propietario":"Jessica Melero"})
```
Si todo ha ido bien mostrará: 
```
WriteResult({ "nInserted" : 1 })
```

#### Update :pencil2:
Para poder actualizar un documento usaremos el método `updateOne()` y la palabra `$set`. En este caso hay que pasarle dos parámetros, el primero es el filtro por el que buscará mongo para encontrar el documento que va a editar. Y el segundo son los parámetros que se van a modificar que puede ser simplemente uno o varios. Dejo un ejemplo de cada caso.

```
> db.mascotas.updateOne({nombre:"Enki"}, {$set: {edad: 4})
```
```
> db.mascotas.updateOne({nombre:"Enki"}, {$set: {edad: 4, propietario: "Jessica"})
```
:point_up:Fíjate en la segunda propiedad que vas a actualizar. Asegúrate de que está dentro de los corchetes de `$set: {}` y no fuera. Puedes poner tantas propiedades como desees actualizar.

Si todo ha ido bien aparecerá:
```
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
```
En el caso de que no encuentre el documento aparecerá `"matchedCount":0` y `"modifiedCount":0`.

#### Delete :x:
Para eliminar un documento de la base de datos usaremos el método `deleteOne()` y el parámetro que le pasamos es similar a cuando buscamos un documento en concreto. Voy a poner un ejemplo para que se vea mejor:
```
> db.mascotas.deleteOne({nombre:"Duna"})
```
Si todo va bien aparecerá algo similar al mensaje de actualizar un documento pero sin `"matchedCount":0`.
```
{ "acknowledged" : true, "deletedCount" : 1 }
```
Este comando para eliminar un documento, pero si quieres eliminar una colección entera entonces tienes que ejecutar el método `drop()`

```
> db.mascotas.drop()
```
Si no hay ningún error aparecerá `true`, si no puede eliminar la colección devolverá `false`.

:information_source: Para salir de la consola escribe `> exit`

##  :dart: TIP

Como habrás podido observar, cuando haces un `find()` o `findOne()`, la consola te muestra todo sin formato. Existe un método llamado `pretty()` que se coloca justo después que deja el código en formato *json*.
###### Sin formato

```
> db.mascotas.find()
{ "_id" : ObjectId("id_mongo"), "nombre" : "Enki", "especie" : "conejo", "sexo" : "Macho", "edad" : 5, "propietario" : "Jessica" }
{ "_id" : ObjectId("id_mongo"), "nombre" : "Duna", "especie" : "felino", "sexo" : "Hembra", "edad" : 1, "propietario" : "Maria" }
```
###### Con formato
```
> db.mascotas.find().pretty()
{
	"_id" : ObjectId("id_mongo"),
	"nombre" : "Enki",
	"especie" : "conejo",
	"sexo" : "Macho",
	"edad" : 5,
	"propietario" : "Jessica"
}
{
	"_id" : ObjectId("id_mongo"),
	"nombre" : "Duna",
	"especie" : "felino",
	"sexo" : "Hembra",
	"edad" : 1,
	"propietario" : "Maria"
}
```
----------

Espero que haya servido de ayuda :blush: 
Si surge algún error en algunas de estas consultas dejarla en los comentarios y las resolvemos.
![thanks](https://media.giphy.com/media/SY2hQpAMLnuxtgLT5C/giphy.gif)