martes, 31 de diciembre de 2013

MongoDB con Java en Linux

Este tutorial es un poco mas avanzado,es de esos tutoriales sueltos que están dedicados a los usuarios con cierta experiencia en java,así que no es igual que los que hasta ahora hemos estado viendo.

Primero que nada yo les recomiendo que usen eclipse para un rápido trabajo,si no es así de todas formas se puede programar desde un editor común pero yo voy a usar Eclipse en este tipo de tutoriales.

Primero que nada descargamos el driver:

http://central.maven.org/maven2/org/mongodb/mongo-java-driver/2.9.3/

En este caso hoy por hoy esta el 2.9.3 así que pueden usar wget en la terminal,para descargar:

wget http://central.maven.org/maven2/org/mongodb/mongo-java-driver/2.9.3/mongo-java-driver-2.9.3.jar

Ahora creamos un proyecto en eclipse:

Nuevo Projecto Java-> Elegimos de nombre MonEjemplo // Por ejemplo




Le damos next y en Libraries le damos Add external Jars y elegimos el dirver .jar que descargamos:



Ahora pasamos a la pestaña Order and Export y palomeamos el driver:




Bien con esto listo vamos al src y creamos una nueva clase,yo la llame MainMongo y añadimos el static main:



Ahora si esta listo nuestra clase main,primero que nada importamos el driver:

import com.mongodb.*;

O podemos importar solo lo que usaremos como se ve mas abajo.

Primero que nada vamos a crear una conexión al localhost:

Primero añadimos una UnknownHostException al main,para poder usar la función,vamos a ver un esqueleto básico:

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.List;
import java.net.UnknownHostException;
import java.util.Set;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;

public class MainMongo {
   // Variable miembro privadas
 private Mongo conexion; // Conexion
 private DB database; // Base de datos
 private DBCollection collection; // Colleciones

 /**
  * @param args
  * @throws UnknownHostException 
  */
 public static void main(String[] args) throws UnknownHostException {
  // TODO Auto-generated method stub
  MainMongo ObjetoMongo = new MainMongo();
  ObjetoMongo.conexion("localhost"); // Creamos una conexion

 }
 
 private void conexion(String host) throws UnknownHostException {
  this.conexion = new Mongo(host); // Definimos la variable miembro
  List bases = conexion.getDatabaseNames(); // Usamos una lista para ver las bases de datos
  System.out.println("Bases de datos :");
  for (String b : bases) { // Las recorremos
   System.out.println("Bases de datos : "+b);
  }
  /*
     Podemos agregar mas funciones,para emular una shell,pero este es un ejemplo basico
  */
  System.out.println("Usando test");
  this.database = this.conexion.getDB( "test" ); // Definimos la base de datos
 }
}


Bien,ahora vamos a ver algunos ejemplos en funciones:

Como ver las colecciones y usar una:


1
2
3
4
5
6
7
8
9
private void colecciones() {
 Set colls = this.database.getCollectionNames(); // Esto nos devuelve Set con el nombre de las conexiones
 System.out.println("Colecciones de "+this.database.getName().toString());
 for (String c : colls) { // Las mostramos
  System.out.println(c);
 }
 this.collection = this.database.getCollection("test"); // Definimos nuestra conexion con la coleccion
 System.out.println("Usando test"); // Esto no es real,ya que es un ejemplo,ya que si no tienes test no servira el ejemplo
}


Ahora una funcion para mostrar los elementos de una coleccion:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
private void mostrarelementos() {
 System.out.println("Todos los elementos :");
 DBCursor cursor = this.collection.find(); // Buscamos todos los elementos en un cursor
 // Usamos un manejador de execepciones por si falla algo
 try {
    while(cursor.hasNext()) { // Miestras haya elementos nos movemos en el bucle
        System.out.println(cursor.next()); // Nos movemos al siguiente
    }
 } finally {
    cursor.close(); // Cerramos pase lo que pase
 }
}


Insertar elementos,para insertar valores en una base de datos creamos un objeto BasicDBObject en mongo seria así:

x = {"Elemento":1}}

db.test.insert(x)

En java esto se ve así:

BasicDBObject x = new BasicDBObject("Elemento : ", 1);

this.collection.insert(x);

O usando una clase anónima:

this.collection.insert(new BasicDBObject("Elemento : ", 1));

Por ejemplo una función para añadir 100 elementos:


1
2
3
4
5
6
private void insertar() {
 System.err.println("Insertando elementos");
 for (int i=0; i < 100; i++) {
     this.collection.insert(new BasicDBObject("Elemento : ", i));
 }
}

Si quisieramos hacer algo mas avanzado como en mongo esto:

x = {name:"atheyus",sitio:"itimetux.com"}

En java luce asi:

BasicDBObject x = new BasicDBObject("name", "atheyus").append("sitio", "itimetux.com");

O algo mas avanzado,en mongo:

x = {name:"atheyus",sitio : { dominio:"itimetux.com",nombre:"Tiempo de Tux"}}

En java:

BasicDBObject x = new BasicDBObject("name", "atheyus").append("sitio",new BasicDBObject("dominio", "itimetux.com").append("nombre", "Tiempo de Tux"));

Y asi lo podemos hacer en muchos niveles.

Ahora que entendemos como definir objetos basicos de la db,podemos usar eso mismo para hacer una consulta:

Si quisiera buscar todos los registros que tengan de name atheyus así lo haríamos en mongo:

db.test.find({"name":"atheyus"})

En java esto seria así:


1
2
3
4
5
BasicDBObject x = new BasicDBObject("name", "atheyus");

DBCursor cursor = this.collection.find(x);

// Aqui usamos un bucle que recorra los valores 


Para borrar una base de datos usamos:

conexion.dropDatabase("test"); // test es la base de datos

Eso es todo :D

Referencias: http://docs.mongodb.org/

Ver el codigo ya que no se ven bien las letras entre Paréntesis angulares (de List y Set)y puede dar serios errores.

Codigo completo : MainMongo.java

1 comentario:

Los comentarios serán revisados antes de ser publicados.