Blog
En la anterior clase hemos dejado instalado MongoDB listo para hacer nuestras primeras consultas. Si venís de una base de datos relacional como puede ser MySQL, estas consultas resultarán bastante diferentes en un principio, pero son muy sencillas y vamos a explicarlas paso por paso.
Como hemos explicado anteriormente, en MongoDB no hay esquemas: cada documento puede tener campos en común con otros campos de otra colección, o puede no tenerlos. Pero esto no significa que no podamos tener esquemas, como veremos con Mongoose más adelante.
Mongo usa colecciones, las cuales contienen documentos en formato JSON, como en este ejemplo:
{ _id: ObjectId(‘1b19654523658’), nombre: 'UniPython', tipo: 'Profesor' }
En esta clase vamos a mostrar los comandos básicos de mongo, como por ejemplo mostrar las bases de datos, crearlas, borrarlas, insertar registros y eliminarlos.
Bases de datos
Para mostrar las distintas bases de datos que tengamos en nuestro equipo, podemos usar show databases o show dbs. Esto nos devolverá la lista de bases de datos que tengamos.
Para crear una base de datos o usarla, deberemos de usar el comando use <nombre> donde <nombre> es el nombre de la base de datos o crear o usar. Por ejemplo, en este ejemplo vamos a crear la base de datos ‘alumnos’ con el comando use alumnos.
Ahora mismo, una vez creada la base de datos alumnos, si ejecutamos el comando use alumnos, veremos que no aparece en la lista. Esto es debido a que aún no tenemos colecciones, y por lo tanto, no aparece.
En las colecciones es donde Mongo almacenará los datos que insertemos. Para mostrar todas las colecciones que contiene la base de datos, podemos usar el comando show collections.
Insertar y mostrar datos
Una vez tenemos la base de datos ‘alumnos’ creada, vamos a insertar registros para tener datos que seleccionar. Para ello, tendremos que usar insert, y pasarle un json. Por ejemplo, para insertar un alumno con los campos ‘nombre’, ‘edad’ y ‘pais’, vamos a crear un json como el siguiente:
db.alumnos.insert({nombre: 'Paco', edad: 43, 'pais': 'España'})
Como podemos ver, en ningún momento hemos especificado que ‘nombre’ o ‘pais’ sea un varchar y edad un INT.
Una vez ejecutamos el comando, veremos que en la terminal aparece el mensaje de ok:
WriteResult({ "nInserted" : 1 })
Podemos introducir también el ID, pero si no lo especificamos, se creará automáticamente. Por ejemplo, vamos a crear otro registro esta vez con el id 1, especificando el campo ‘_id’:
db.alumnos.insert({nombre: 'Jorge', edad: 23, 'pais': 'Francia', _id: 1})
Es importante saber que si insertamos dos veces el registro con el mismo id, entonces nos dará un error de clave duplicada y no insertará el registro, MongoDB automaticamente trara e campo id como si fuese una clave primaria.
Si queremos introducir un registro con una variable, también podemos hacerlo de forma sencilla. Por ejemplo, podemos crear una variable ‘alumno’ y pasarla al insert:
alumno = {nombre: 'Raul', edad: 13} db.alumnos.insert(alumno)
Como podemos ver, no es necesario en MongoDB especificar todos los campos en un insert. En este caso no hemos introducido el campo ‘pais’, sino que el registro sólo contiene el nombre y la edad.
Podríamos crear un documento con esta variable que hemos creado, de esta manera:
db.alumnos.create(alumno)
Para seleccionar los datos que acabamos de introducir, podemos usar el comando db.alumnos.find() o db.alumnos.find().pretty() para que nos devuelva los datos tabulados y más bonitos:
Si venís de una base de datos relacional, os habréis dado cuenta de que este comando es similar al que usaríamos con: SELECT * FROM alumnos;
Para contar el número de registros que tenemos en la base de datos, podemos usar count():
db.alumnos.count()
Para buscar un registro en la base de datos, por ejemplo buscar ‘Raul’ en el campo ‘nombre’, podemos usar un find() con un json dentro, por ejemplo:
db.alumnos.find({nombre: 'Raul'})
Y para recuperar el primer registro, sin criterios, podemos usar findOne()
db.alumnos.findOne()
Para actualizar un registro, podemos usar la función update, pasandole como segundo parámetro $set, donde especificaremos el campo a actualizar. En el primero haremos un find:
db.alumnos.update({nombre: 'Raul'}, {$set: {edad: 98}})
Eliminar un registro es igual de sencillo, con la función remove y especificando los criterios, eliminaremos registros:
db.alumnos.remove({nombre: 'Raul'})
En este caso hemos eliminado los registros con el nombre ‘Raul’.
Como habéis podido comprobar, la sintaxis de node es muy sencilla y fácil de recordar. En la próxima clase veremos consultas más avanzadas.