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.

Algunos drivers y bibliotecas

Lista completa de Bibliotecas para MongoDB en NodeJS