NoSQL (II): Java + MongoDB

La primera de las demos que vamos a realizar en esta serie de artículos es la de MongoDB. Podéis encontrar la página del proyecto en este enlace. MongoDB es una base de datos orientada a documentos. ¿Qué es esto? Pues bien, como dijimos, ya iremos explicando este tipo de términos en el apartado de teoría, id apuntando todas las dudas y al final, veremos si están todas las preguntas respondidas o no (dadme un voto de confianza sobre la metodología de aprendizaje expuesta en esta serie de artículos y al final la discutimos).

Instalando MongoDB

Lo primero que tenemos que hacer es ir a la página del proyecto y descargar dos cosas. La primera de ellas es la base de datos MongoDB en si, sus ejecutables para nuestro sistema. Decir que está vez, estoy haciendo esto sobre Windows 7 y no sobre Linux, pero las diferencias entre una y otra instalación, salvando las distancias, son mínimas.

Lo segundo que tenemos que descargar aunque no vamos a utilizarlo inmediatamente, es el driver para realizar la conexión de base de datos. En este caso, obviamente, descargaremos el de Java si vais a seguir los pasos de las demos que yo voy a realizar. Si algún desarrollador de otro lenguaje está siguiendo las demos, pero implementándolas en otro lenguaje, tendrá que descargar la que corresponda. Si alguno de los que está intentando hacerlo con otro lenguaje se anima con que me envíe el documento con los pasos para la demo terminada la publicaré con mucho gusto tras una pequeña revisión.

Una vez descargado el fichero de bases de datos, solo tendréis que descomprimirlo donde deseéis y ya tendréis instalada la bases de datos MongoDB. En este caso, el directorio que había dentro del zip, lleva todos los ejecutables necesarios para poder trabajar con MongoDB.

Como nunca deberíamos fiamos de nada que no hayamos probado, vamos a ello. Para ello abriremos una consola y nos iremos a la ruta donde estén los ejecutables de MongoDB. Un paso previo interesante suele ser añadir una variable de entorno al sistema para llegar rápidamente o incluso añadir la ruta al path del sistema, algo del estilo de MONGODB_HOME.

Tras llegar a la ruta correcta con un simple listado de ficheros, veremos varios ejecutable con unos nombres bastante claros para hacernos una idea de la tarea que desempeña cada uno de ellos. En nuestro caso, el primero que nos interesa es “mongod.exe”. Este será el encargado de lanzar el demonio con la base de datos que se quedará a la escucha de peticiones. Antes de lanzarlo, simplemente comentar que tiene un argumento “--dbpath” que será el directorio donde almacenará nuestras bases de datos. Por defecto, la ruta será “C:\data\db”, pero podemos especificar cualquier otra a través de dicho argumento. Algo muy importante es que, sea la ruta que sea, la por defecto o una especificada por nosotros, la vemos a tener que crear previamente a mano, MongoDB no lo hará por nosotros. Así de esta formar para la primera ejecución haremos algo de este estilo:

cd <path_mongoDB>\bin

mongod --dbpath “<path_to_store_db>”

Con esto obtendremos un mensaje similar a este, lo que nos confirmará que el arranque ha ido bien:

[websvr] admin web console waiting for connections on port 28017

Tras esto, también podremos comprobar desde el navegador que se ha ejecutado correctamente accediendo a la ruta:

localhost:28017 (Adaptadla según el servidor donde estéis probando)

Para conecta a MongoDB desde la consola bastará ejecutar en esta el comando “mongo test” para conectar a la base de datos “test” que se crea inicialmente.

Conectando desde Java

Para empezar, lo primero que tendremos que hacer es crear un proyecto Java. Un proyecto básico, lo podéis crear desde Eclipse, con maven, como os de la gana, no deberíais tener ningún problema. Si alguien lo crea con maven, que se acuerde añadir al pom.xml la dependencia correspondiente.

Lo segundo que deberemos hacer es añadir el Driver de conexión a la base de datos, el cual además, nos permitirá tener autocompletado a la hora de escribir el código. Aquí ya que cada uno utilice el método que más le guste, yo personalmente, he seguido los siguientes pasos:

  1. Crear un directorio “lib” en el proyecto.
  2. Copiar el .jar correspondiente al Driver en el directorio.
  3. Click con el botón derecho sobre el proyecto e ir a:  Build Path -> Configure Build Path…
  4. En la pestaña Libraries necesitamos añadir un nuevo jar que será el de nuestro Driver.

A partir de aquí, solo tenemos que escribir el código correspondiente a nuestro primer ejemplo:

public static void main(String[] args) {
try {
// Remember 28017 is web admin console
Mongo conn = new Mongo("localhost", 27017);
// if db doesn't exist, mongodb will create it
DB db = conn.getDB("helloDB");
// if collection doesn't exist, mongodb will create it
DBCollection coll = db.getCollection("helloCollection");
// Create document
BasicDBObject doc = new BasicDBObject();
doc.put("id", 1001);
doc.put("message", "Hello World!");
// Store
coll.insert(doc);
// Search document in db
BasicDBObject query = new BasicDBObject();
query.put("id", 1001);
// Launch query
DBCursor cursor = coll.find(query);
// Show records
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException  e) {
e.printStackTrace();
}
}

Tras ejecutar este pequeño programita, varemos el siguiente resultado:

{ "_id" : { "$oid" : "50472f062b9d17af147c97d1"} , "id" : 1001 , "message" : "Hello World!"}

Vamos a añadir un par de líneas más porque para el siguiente documento quiero tener un par de propiedades adicionales:

doc.put("id", 1002);
doc.put("title", "helloWorld");
oc.put("message", "Hello World!");
doc.put("language", "en");

Y tras volver a ejecutar obtenemos el siguiente resultado:

{ "_id" : { "$oid" : "50472f062b9d17af147c97d1"} , "id" : 1001 , "message" : "Hello World!"}
{ "_id" : { "$oid" : "50472f902b9dd6981ebb68d6"} , "id" : 1001 , "title" : "helloWorld" , "message" : "Hello World!" , "language" : "en"}

¿No habéis observado nada extraño? Hemos podido añadir en la misma colección documentos con diferentes propiedades y la base de datos no se a quejado ni nada, cosa que jamás podríamos hacer en una tabla de base de datos. Además, si os dais cuenta, no hemos necesitado hacer ninguna definición de estructura ni tablas ni nada similar.

Bueno, hasta aquí la primera de las demos. Espero que no hayáis tenido ningún problema para seguirla. Si tenéis alguna duda preguntad. Nos vemos.

NoSQL (II): Java + MongoDB

One thought on “NoSQL (II): Java + MongoDB

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.