Buenos amigos: NodeJS + MongoDB
El intento de este post no es explicar qué es y cómo funciona MongoDB sino como utilizar una base con NodeJS.
Para lo referido a MongoDB, descubrí un librito excelente, corto y conciso en la jsConfAR: The Little MongoDB Book by Karl Seguin, lo interesante del libro es que está hecho en markdown y publicado en github con una versión al español traducida por @uokesita.
Me tomé el trabajito de pasar el markdown español a varias versiones para que lo puedas leer online, en algún dispositivo movil o en el kindle:
Instalando y configurando un Server Mongo
Mi prueba la hice en Ubuntu, pero no varia mucho para otras distribuciones/ SOs, podés ver las instrucciones para otros en: Quickstart – Installation Guides.
Descargamos la versión estable de MongoDB desde el sitio oficial de descargas
Después que termina toda la descarga, descomprimimos y navegamos hasta la carpeta bin de adentro y creamos un archivo mongodb.config donde le configuramos el path a donde van a ir las bases de datos (en mi caso de linux) agregándole la siguiente linea:
dbpath=/home/[usuario]/mongodb/data
Para windows podría ser:
dbpath=c:\mongodb\data
Asegurate de que el path exista y sino crealo (yo tuve que crear el directorio data)
Y ahora (parados en el bin) iniciamos el servidor con el path al mongodb.config:
./mongod --config mongodb.config
mongod es el proceso de servidor y mongo el cliente.
En ese momento vamos a ver que inicia el server y queda en espera en un puerto, en mi caso el 27017 (que es el default de Mongo)
MongoDB starting : pid=22105 port=27017 dbpath=/data/db/ 32-bit host=miUbuntu
Listo!, ya tenemos el server corriendo. Ahora abrimos otro terminal y ejecutemos el cliente mongo y un db.version() para probar:
$ ./mongo
> db.version()
Bueno, ya tenemos todo listo, podemos crear una colección y un documento:
use unTestDB
db.personas.insert({nombre: 'pepe', apellido: 'gonzales'})
db.personas.find()
{ "_id" : ObjectId("4fbaf11c7b25b9eac0403c26"), "nombre" : "pepe", "apellido" : "gonzales" }
El cliente lo iniciamos para crear una base de prueba, ya podemos matar el proceso mongo si molesta.
No mates el mongod que es el server!
Conectando a MongoDB desde NodeJS
Primero necesitamos un driver para node, y ahora se pone fácil:
npm install mongodb
El packete de NPM mongodb es un driver para NodeJS como también hay otras bibliotecas que vienen con algunas cosas interesantes como Mongoose, o MongoJS, pero no es nuestro caso ahora.
Creamos un app.js donde vamos a hacer una prueba contra la base unTestDB que creamos antes:
// hacemos referencia a la dependencia
var mongodb = require('mongodb');
// obtenemos el server MongoDB que dejamos corriendo
// *** el puerto 27017 es el default de MongoDB
var server = new mongodb.Server("127.0.0.1", 27017, {});
// obtenemos la base de datos de prueba que creamos
var dbTest = new mongodb.Db('unTestDB', server, {})
// abrimos la base pasando el callback para cuando esté lista para usar
dbTest.open(function (error, client) {
if (error) throw error;
//en el parámetro client recibimos el cliente para comenzar a hacer llamadas
//este parámetro sería lo mismo que hicimos por consola al llamar a mongo
//Obtenemos la coleccion personas que creamos antes
var collection = new mongodb.Collection(client, 'personas');
//disparamos un query buscando la persona que habiamos insertado por consola
collection.find({'nombre': 'pepe'}).toArray(function(err, docs) {
//imprimimos en la consola el resultado
console.dir(docs);
});
});
Lo que nos queda es correr el app.js y ver el output en la consola
$ node app.js
[ { _id: 4fbaf11c7b25b9eac0403c26,
nombre: 'pepe',
apellido: 'gonzales' } ]
Y eso es todo!.
De nuevo, el objetivo del post es que veas lo simple que es engancharse desde NodeJS a un MongoDB, la parte de estudio (si nunca usaste Mongo) está más del lado de qué es y cómo funciona Mongo, el libro que está al inicio del post es un arranque muy bueno.
Links útiles
- Documentación completa del Driver Nativo de MongoDB para NodeJS
- The Little MongoDB Book by Karl Seguin
- Quickstart – Installation Guides
- Sitio oficial de descargas – MongoDB
- Mongo-Express: Interfaz Web de administración de bases MongoDB