MongoDB es uno de los motores de base de datos NoSQL mas popular, NoSQL significa que para hacer las consultas no usamos el típico lenguaje SQL, Para almacenar los datos MongoDB no usa tablas, mas bien utiliza colecciones que están en un formato similar a JSON denominado BSON.
Revolución MongoDB
MongoDb (A partir de ahora solo mongo) implementa una forma diferente de utilizar las base de datos, esta vez saliendo del típico lenguaje SQL y del uso de tablas para usar un formato mas ligero, las ventajas son claras, mayor rapidez para las consultas sobre todo al manejar grandes volúmenes de datos.
Quienes están usando ahora mongo, según Wikipedia, MTV Network, Craiglist y FourSquare, por mencionar algunas.
Instalación
Para instalar el motor mongo basta dar un vistazo a la pagina oficial de mongodb donde ademas encontraremos mucha información.
En mi caso, en Linux Mint (distribución basada en Debian) un apt-get mágico lo resuelve todo:
sudo apt-get install mongodb
Ejecutando MongoDB
MongoDB digamos que se compone de 2 aplicaciones principales, el servidor y el cliente, el servidor es la parte que “sirve” las base de datos y el gestiona el almacenamiento y todo lo referente a mongodb, la otra parte es el cliente, el cual se conecta al servidor y realiza peticiones, las cuales responde el servidor.
Para iniciar el servidor ejecutaremos el comando “mongod” cada vez que e quiera usar mongo, también podemos configurar mongod para que inicie con el sistema, una vez que el servidor de mongo esta funcionando podemos continuar.
Para conectarnos al servidor de mongo, en una terminal escribimos:
mongo
Y obtendremos el siguiente resultado:
Bases de datos
Para mostrar todas las base de datos que tenemos en el servidor ejecutamos el comando:
show dbs
Para crear base de datos seguimos los siguientes pasos:
use nombredb
Donde nombredb es el nombre de la base de datos que vamos a crear, al ejecutar este comando aun no se crea la base de datos, ya que necesitamos insertar como mínimo un dato para crear la base de datos.
Para eliminar una base de datos, después de que la base de datos halla sido creada y después de ejecutar el comando “use” con el nombre de la base de datos por eliminar, ejecutamos:
db.dropDatabase()
Tablas o colecciones
Para crear mostrar las tablas o colecciones que tenemos en una base de datos mongodb:
show collections
o también
db.getCollectionNames()
Para crear una colección hay dos formas, la primera creando una colección vacía.
db.createCollection("nombre_tabla_collection")
Donde nombre_tabla_collection es el nombre de la tabla o colección que deseas crear.
La segunda forma es simplemente insertando un valor en una tabla, lo cual veremos mas adelante.
Para eliminar una tabla, ejecutamos:
db.nombretabla.drop()
CRUD: Insertar, Mostrar, Actualizar y Eliminar
Ahora veamos como hacer CRUD en una coleccion de mongodb:
Insertar
Para insertar valores en una colección, no es necesario que la colección este creada, simplemente escribimos:
db.micoleccion.insert({"nombre":"Agustin","apellido":"Ramos","domicilio":"Tabasco"}) db.micoleccion.insert({"nombre":"Sebastian","apellido":"Ramos","domicilio":"Tabasco"}) db.micoleccion.insert({"nombre":"Leonardo","apellido":"Ramos","domicilio":"Tabasco"}) db.micoleccion.insert({"nombre":"Jennifer","apellido":"Jimenez","domicilio":"Tabasco"}) db.micoleccion.insert({"nombre":"Diana","apellido":"Jimenez","domicilio":"Tabasco"}) db.micoleccion.insert({"nombre":"Jeremias","apellido":"Escalante","domicilio":"Quintana Roo"})
Si la colección “micoleccion” no existe, mongodb la creara automáticamente e insertara los datos, los datos tienen un formato tipo JSON, la estructura básica de una inserción es {“clave”:”valor”}, donde las diferentes relaciones clave-valor están separadas por comas “,”.
Al hacer cada inserción, mongodb automáticamente generara un ID unico, similar al “auto_increment primary key”, pero este ID es del tipo ObjectId de mongodb y es alfanumérico, muy similar a sha1 o md5.
Tambien podemos hacer inserciones mas complejas, todo lo que sea soportado por JSON y por BSON ( el formato de MongoDB, con algunos tipos agregados sobre el original JSON)
Mostrar
Para mostrar todos los datos hacemos lo siguiente:
db.micoleccion.find()
Seria lo mismo que ejecutar en SQL “select * from micollecion”, es decir nos muestra todos los datos.
Para filtrar o hacer algo similar al where, en este caso filtrare todos los resultados en los que el campo apellido sea igual a Ramos:
db.micoleccion.find({"apellido":"Ramos"})
Y el resultado:
Para obtener un resultado mediante el id, la consulta seria:
db.micoleccion.find({"_id":ObjectId("56c9a1ffbb6e73925f958b1a")})
Actualizar
Para actualizar un registro, ejecutamos:
db.micoleccion.update({"_id":ObjectId("56c9a1ffbb6e73925f958b1a")},{$set:{"apellido":"Ramos Escalante"}})
Y el resultado:
El comando para hacer update o actualizar se divide en 2 partes, la primera selecciona todos los registros que se modificaran (en el ejemplo solo selecciono el registro que corresponda a un id especifico) y la segunda “set” aplica los valores que se van a actualizar o modificar en el/los registros seleccionados.
Eliminar
Para eliminar algunos registros de una colección hacemos lo siguiente:
db.micoleccion.remove({"_id":ObjectId("56c9a1ffbb6e73925f958b1a")})
Y el resultado:
Para eliminar todos los registros de una coleccion, ejecutamos:
db.micoleccion.remove()
El equivalente a “delete from micoleccion” en SQL.
Notas Especiales
MongoDb tiene algunas peculiaridades, que vamos a notas sobre todo si venimos de MySQL:
- No es necesario finalizar las consultas con “;” (punto y coma)
- No existe “describe mitabla”: Las colecciones en MongoDB no tienen una “estructura” fijada, por lo que en una colección incluso pueden haber registros que tengan ciertos “campos” y otros no, dicho esto, no se puede hacer una descripción de la colección.
Conclusion
Hacer CRUD en mongodb es relativamente fácil, les dejo a ustedes para que hagan sus practicas y aprendan a manejar esta tecnología que cada vez se usa mas y mas, espero de mi parte pronto publicar un sistema que use MongoDB en lugar de MySQL.