Get it on Google Play

NoSQL con MongoDB y MongoLab

19-04-2015
 

En este ejemplo explicaremos como acceder a una base de datos no relacional como MongoDB desde Java. MongoDB es una base de datos no relacional orientada a documentos, es decir, que tu creas una colección y allí vas metiendo documentos JSON sin una estructura prefijada(Es muy flexible).

Entre los pros de MongoDB están su velocidad de lectura y su potencia a la hora de moldear datos y realizar búsquedas. Por ejemplo, es ideal para aplicaciones de análisis de datos.

Su principal contra esta en el hecho de que por cada escritura bloquea toda la base de datos, lo que afecta negativamente a su rendimiento, es complicado que tenga un rendimiento superior a bases de datos tradicionales en aplicaciones en tiempo real con muchos usuarios escribiendo datos concurrentemente.

En lugar de instalarla en local la base de datos hemos hecho uso del servicio de MongoLab. MongoLab nos da el servicio de base de datos como servicio SaaS(Software As A Service) utilizando la infraestructura de proveedores como Google, Microsoft o Amazon. De esta manera solo tenemos que preocuparnos de dar de alta la base de datos y crear el usuario con el que nos vamos a conectar. Aquí un pantallazo del panel de control de MongoLab:

MongoLab control panel

MongoLab control panel

Una vez hecho esto ya podemos descargarnos la librería ‘mongo-java-driver-3.0.0.jar’ de la siguiente URL https://oss.sonatype.org/content/repositories/releases/org/mongodb/mongodb-driver/3.0.0/.

El siguiente script(Esta comentado) se conecta a la base de datos, inserta un albarán(Con los campos nombre, líneas del albarán y el total del albarán), muestra por pantalla el número total de albaranes y busca todos los que tengan una línea de albarán ‘pantalones’ y que esta sea superior a 7.

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.BasicDBObject;
import com.mongodb.ServerAddress;
import com.mongodb.MongoCredential;

import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;

import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Filters.gt;

import org.bson.Document;

import java.util.List;
import java.util.ArrayList;

class MongoDB {

	public static void main(String[] params) {
		try {
			/* Conectamos a Base de datos */         
			ServerAddress srvrAdd = new ServerAddress("ds061741.mongolab.com",61741);
			MongoCredential credential = MongoCredential.createCredential("xxx", "test1", "yyy".toCharArray());
			MongoClient mongoClient = new MongoClient( srvrAdd, java.util.Arrays.asList(credential) );

			MongoDatabase database = mongoClient.getDatabase("test1");

			/* Seleccionamos colección 'albaran' */
			MongoCollection<Document> albaranes = database.getCollection("albaran");

			/* Añadiendo Albarán */
			List<Document> lineas=new ArrayList<Document>();
			lineas.add( new Document("pantalones", 8) );
			lineas.add( new Document("calcetines", 2) );

			Document alb = new Document("name", "Juan "+new java.util.Date().getTime() )
	        		.append("lineas", lineas )
        			.append("total", 10);

			albaranes.insertOne( alb );

			/* Listamos Albarantes */
			System.out.println("Total Albaranes: "+albaranes.count()+"\n" );
			
			/* Buscamos todos los albaranes con pantalones>7 */
			MongoCursor<Document> cursor = albaranes.find( gt("lineas.pantalones", 7) ).iterator();

   			while(cursor.hasNext()) {
				System.out.println(cursor.next());
				}

			cursor.close();



		} catch (Exception ex) { ex.printStackTrace(); }
		
		}

	}

La salida por pantalla debería ser algo parecido a esto.

MongoDB app out

MongoDB app out

Leave a Reply

© Albert Coronado Calzada