Introducción #
Supongo que habrá muchos GUI para poder interacturar con MongoDB pero conoci Robo en un video para aprender como funciona. La versión que tengo instalada es la Robo 3T que es gratuíta que para lo que necesito es suficiente.
Conexión con la base de datos #
Una vez se entra al Robo 3T nos sale esta ventana:
Para crear una nueva conexión hay que pulsar sobre el enlace Create
Aquí entra en juego el string de conexión:
mongodb+srv://<usuaurio>:<password>@cluster0.6huz7.mongodb.net/myFirstDatabase?retryWrites=true&w=majority
Que nos daba el botón Connect de nuestro base de datos.
Este string una vez puesto usuario, password y base de datos correctos hay que ponerlo en el campo al lado del botón “From URI” y a continuación pulsar dicho botón. Nos aparecerá arriba los servidores:
Salen tres servidores porque aún en la versión gratuita hay replicadas. El paso final es darle un nombre y darle al botón Save y nos saldrá las conexiones:
Al hacer doble click nos conectaremos a nuestra base de datos, apareciendonos a la derecha los datos de la conexión:
Para activar el shell para empezar a trabajar hay que hacer doble click sobre un nodo que aparecerá en la carpeta Replica set, al hacer nos saldrá a la derecha lo siguiente:
IMPORTANTE: Cuando se escriba los comandos en el shell para que se ejecuten hay que pulsar CTRL+ENTER. Si se pulsar solo ENTER solo hará un salto de línea.
Creación de la base de datos y collection #
Para crear o usar una de datos hay que usar el comando use. Ejemplo:
use ejemplo
En el shell nos dirá que se ha cambiado la base de datos.
El mensaje será el mismo tanto si la base de datos existe como si no. Si la base de datos no existe no se creará hasta que no se cree una collection.
IMPORTANTE: A partir de ahora todos los comados para hacer cualquier operación con la base de datos tiene que empezar por DB.
Para crear la collection se puede hacer de dos maneras:
- Insertar directamente un valor:
db.myNewCollection2.insertOne( { x: 1 } )
- Creando directamente el collection, que es como me gusta más.
db.createCollection('mitabla')
Una ejecutado la sentencia nos aparecerá una ventana debajo:
Importante: Si no se pone el use la collection se creará en la base de datos por defecto que es Cluster0. Por ello el use hay que dejarlo siempre.
Donde vemos la definición de la collection creada. Lo que sale no lo puedo llamar campos porque después veremos que puedes insertar cualquier tipo de datos. Vamos que un registro que añadas y otro pueden ser completamente distintos, lo malo que cuando se consulte no es viable tener estructuras distintas, pero realmente se puede hacer.
La ventana que sale yo la desacoplo y lo reduzco y lo pongo a un lado para seguir viendo el shell.
Una vez creada la collection la base de datos se crea, si no lo estuviera previamente. Eso lo podemos ver en la propia web:
Operacion CRUD #
Si queremos ver todas las posibilidades de las operaciones CRUD lo mejor es ir a la documentación oficial, yo explicaré las opciones básicas.
Inserción de documentos #
En la siguiente documentación oficial podemos ver más en detalle las posibilidades.
Para insertar un registro simple hacemos lo siguiente:
use ejemplo
db.mitabla.insertOne({{mueble:"mesa", material:"madrea", medidas:{altura:50,anchura:30,unidad:"cm"})
El formato para introducir los registros es similar, o practicamente igual, al formato JSON. Una vez ejecutado la sentencia veremos el siguiente resultado:
Es importante mencionar que siempre se inserta un campo llamado _ID. Este campo es que tendrá la clave única del registro. En la imagen lo podemos ver en la rama insertedID.
Si queremos insertar multiples registros a la vez podemos usar la opción insertMany poniendo un [{
use ejemplo
db.mitabla.insertMany([{mueble:"mesa",
material:"madera",
medidas:{altura:50,anchura:30,unidad:"cm"},
color:"blanco"},
{mueble:"silla",
material:"madera",
medidas:{altura:40,anchura:20,unidad:"cm"},
color:"gris"}])
El resultado en el log de la consola sería el siguiente:
De nuevo en la rama insertedID se pueden ver los _ID que se han insertado.
Un detalle es que en esta inserción de varios documentos he añadido un campo nuevo, COLOR que no estaba en el primer registro que he añadido. Esto es posible en este tipo de base de datos, aunque personalmente no lo recomiendo porque entonces no hay manera de tener una uniformidad de campos en los registros.
Los datos también se pueden consultar de la collection desde la propia base del cloud del mongo:
En la imagen se ve claramente los campos insertados y el campo _id que es la clave única del registro.
Consulta de documentos #
En la documentación oficial encontraremos todas las opción disponibles.
Buscar todos los documentos #
La búsqueda de documentos es muy simple con la siguiente opción:
use ejemplo
db.mitabla.find({})
El resultado sería el siguiente:
Filtro por campos #
El filtro de documentos es muy simple:
use ejemplo
db.mitabla.find({mueble:"mesa"})
El resultado:
Existe la posibilidad de usar operadores,“=,>=,etc”, para poder hacer comparaciones. En la documentación oficial podemos ver los que hay y sus posibilidades.
Para poder filtrar por campos dentro de otros campos, como el que he usado en medidas, se hace de la siguiente manera:
use ejemplo
db.mitabla.find({"medidas.anchura":30})
Y el resultado:
Proyección de campo o seleccionar que campos se quiere recuperar #
En las consultas es posible indicar los campos que se requiere recuperar para ello justo después de poner los filtros se indicarán que campos se quieren visualizar.
Ejemplo:
use ejemplo
db.mitabla.find({mueble:"mesa"},{material:1})
El resultado:
En la imagen se observa que se devuelven los campos de: material e _id. Si no queremos que el campo _id se devuelva hay que hacer lo siguiente:
use ejemplo
db.mitabla.find({mueble:"mesa"},{material:1,_id:0})
Para que no devuelva el campo hay que poner un <nombre_campo>:0.
Ahora, si lo queremos ver el campo de _id habría que hacer:
use ejemplo
db.mitabla.find({mueble:"mesa"},{_id:1})
Esto hace que solo se muestre el campo _id.
Si hacer la inversa, es edcir, que se muestren todos los campos menos el _id:
use ejemplo
db.mitabla.find({mueble:"mesa"},{_id:0})
Más información el documentación oficial.
Actualización de documentos #
En la documentación oficial podremos obtener todas las opciones de la actualización.
Ejemplo vamos actualizar a filtrar los documentos que son mesa para poner que el tipo de material es madera, hay u
use ejemplo
db.mitabla.updateMany({mueble:"mesa"},
{
$set: { "material": "madera"},
})
Como tenemos varios registro que son mesa he usado la opción updateMany. Si solo queremos actualizar un solo registro se usará la opción updateOne.
Si volvemos a lanzar la consulta:
use ejemplo
db.mitabla.find({mueble:"mesa"},{mueble:1,material:1})
Veremos los registros actualizados:
Borrado de documentos #
En la documentación oficial podremos obtener todas las opciones del borrado.
Para el borrado tenemos dos opciones:
- db.collection.deleteOne()
- db.collection.deleteMany()
La primera solo borrará el primer registro que cumpla la condición:
use ejemplo
db.mitabla.deleteOne({mueble:'mesa'})
Veremos el registro que se borra:
Para borrar varios registros que cumplan la condición es con la opción deleteMany. Y si queremos borrar todos los registros hay que hacer lo siguiente:
use ejemplo
db.mitabla.deleteMany({})