Netbeans con Mongo DB - Apuntes 5 PDF

Title Netbeans con Mongo DB - Apuntes 5
Author MARIA DOLORES MARTINEZ AGUILAR
Course economia de l'empresa
Institution Instituto de Educación Secundaria Fernando III El Santo
Pages 14
File Size 410.9 KB
File Type PDF
Total Downloads 21
Total Views 143

Summary

Instalación y puesta en funcionamiento de MongoDB haciendo uso de Netbeans...


Description

2. Creamos el proyecto en Netbeans y añadimos las librerías

Creamos el proyecto en Netbeans Para estas pruebas voy a utilizar Netbeans, creamos un proyecto básico Java: • •

Creamos el proyecto: File > New Project Seleccionamos: Java > Java Application para crear un proyecto sencillo para trabajar con nuestros ejemplos.

Añadimos la librería Netbeans Para añadir la librería en Netbeans para después incluirla en el proyecto, primero descargamos el driver: Java MongoDB driver, ahí encontrarás las versiones disponibles. Una vez descargado en nuestro proyecto situándonos sobre la carpeta Libraries seleccionamos Add Library y pulsamos el botón Create, nos aparece está ventana para darle nombre a nuestra librería y añadir los jar correspondientes:

1

MongoDB driver – Creamos una nueva librería

Ahora añadimos el jar del driver, como puedes ver también se pueden añadir: Javadoc (documentación de las clases y métodos utilizados) y Sources (fuentes del driver), es útil añadir los Javadoc para poder consultar sobre cada método utilizado su documentación:

2

MongoDB driver – Añadimos el jar del driver Si tienes algún proyecto creado con maven puedes seguir la guía de instalación, básicamente lo que necesitas es añadir las dependencias a tu proyecto:

? 1 2 3 4 5 6 7

org.mongodb mongodb-driver 3.0.4

3. Estableciendo la conexión con MongoDB desde Java Ya podemos crear nuestra primera conexión a la base de datos con MongoDB, nos vamos a conectar con la configuración por defecto que es en localhost y el puerto 27017, para esto creamos una nueva instancia con MongoClient mongoClient = new MongoClient(); que se conectará a una instancia mongod en ejecución:

3

Para conectar con la base de datos simplemente utilizamos el método getDatabase(«test»), donde test es el nombre de la base de datos que estamos utilizando, así quedaría nuestro código para la conexión a la base de datos test desde Java:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

package org.xulescode.mongodb; import com.mongodb.MongoClient; import com.mongodb.client.MongoDatabase; /** * Java basic MongoDB connection. * Conexión básica en Java a MongoDB. * @author xules */ public class JavaBasicMongodb { /** * Testing Java basic Mongodb connection. * Probando la conexión básica en Java a Mongodb. * @param args the command line arguments */ public static void main(String[] args) { MongoClient mongoClient = new MongoClient(); MongoDatabase db = mongoClient.getDatabase("test"); } }

Si todo fue bien está es la información que aparecerá en tu pantalla:

? run: 1dic 12, 2015 3:51:45 PM com.mongodb.diagnostics.logging.JULLogger log Cluster created with settings {hosts=[127.0.0.1:27017], 2INFORMACIÓN: mode=SINGLE, requiredClusterType=UNKNOWN, 3serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} 4BUILD SUCCESSFUL (total time: 2 seconds)

La clase MongoClient con el cliente de MongoDB, también nos permite indicar el host y el puerto de la conexión, estos son algunos ejemplos:

? MongoClient mongoClient1 = new MongoClient("localhost"); 1 ? 1MongoClient mongoClient2 = new MongoClient("localhost", 27017); ? MongoClient mongoClient4 = new MongoClient(new ServerAddress("localhost")); 1 4

También, nos podemos conectar a un conjunto de replicas de una forma sencilla pasando una lista de direcciones de servidor con ServerAddress al constructor de MongoClient, por ejemplo:

? 1 2 3 4

MongoClient mongoClient = new MongoClient(Arrays.asList( new ServerAddress("localhost", 27017), new ServerAddress("localhost", 27018), new ServerAddress("localhost", 27019)));

4. MongoDB INSERT En la documentación del Driver de Java puedes encontrar información de los elementos que vamos a utilizar para añadir datos a la base de datos, usaremos: insertOne, insertMany y org.bson.Document. • • •

insertOne: añadimos un documento a la base de datos: documentación método insertOne insertMany: nos facilita la inserción de un conjunto de documentos de una lista: documentación del método insertMany org.bson.Document: representación del documento que utilizamos en MongoDB, esta representación es un Map, la inserción de los elementos se hace en el orden de inserción de la lista como LinkedHashMap: Class org.bson.Document

Añadiendo un documento insertOne Para nuestro primer ejemplo vamos a introducir un único documento usando el método insertOne y creando un documento de tipo org.bson.Document para la inserción, si el documento no tiene id el driver generará uno. El resto de explicaciones las encontrarás sobre la clase, lista para ejecutar e introducir un documento, como puedes ver en el método main:

? 1 2 3 4 5 6

package org.xulescode.mongodb; import com.mongodb.MongoClient; import com.mongodb.client.MongoDatabase; import org.bson.Document; import java.text.DateFormat; import java.text.ParseException;

5

7 import java.text.SimpleDateFormat; 8 import java.util.Locale; 9 import static java.util.Arrays.asList; 10 import java.util.LinkedList; 11 12 import java.util.logging.Level; 13 import java.util.logging.Logger; 14 15 /** * Class tests for inserting data into MongoDB with insertOne and insertMany . 17 * Clase de pruebas para la inserción de datos en MongoDB con 18 insertOne y insertMany 19 * @author xules 20 */ public class JavaMongodbInsertData { 21 private MongoClient mongoClient; // Java MongoDB client 22 (Cliente Java MongoDB) private MongoDatabase mongodb; // Database object (Objeto 23 base de datos) 24 /** 25 * We establish the connection with the database test. 26 * Establecemos la conexión con la base de datos test. 27 */ public void connectDatabase(){ 28 setMongoClient(new MongoClient()); 29 setMongodb(getMongoClient().getDatabase("test")); 30 } 31 /** * We use the method insertOne to add a document to the 32 database example. 33 * Usamos el método insertOne para añadir un documento a 34 la base de datos de ejemplo. 35 */ 36 public void insertOneDataTest(){ try { 37 DateFormat format = new SimpleDateFormat("yyyy-MM38 dd'T'HH:mm:ss'Z'", Locale.ENGLISH); 39 // We add a document to the database directly (Añadimos 40 un documento a la base de datos directamente). getMongodb().getCollection("restaurants").insertOne( 41 new Document("address", asList( 42 new Document() 43 .append("street", "Avenida 44 Castrelos 25 Bajo") 45 .append("zipcode", "36210") .append("building", "180") 46 .append("coord", asList(47 73.9557413, 40.7720266)), 48 new Document() 49 .append("street", "Urzáiz 77 50 Bajo") .append("zipcode", "36004") 51 .append("building", "40") 52 .append("coord", asList(53 73.9557413, 40.7720266)))) 54 .append("borough", "Vigo") .append("cuisine", "Galician") 55 .append("grades", asList( 56 new Document()

6

.append("date", 57 format.parse("2015-10-11T00:00:00Z")) 58 .append("grade", "A") 59 .append("score", 12), 60 new Document() .append("date", 61 format.parse("2015-12-11T00:00:00Z")) 62 .append("grade", "B") 63 .append("score", 18))) 64 .append("name", "Xules")); 65 } catch (ParseException ex) { Logger.getLogger(JavaMongodbInsertData.class.getName()). 66 log(Level.SEVERE, null, ex); 67 } 68 } 69 public MongoClient getMongoClient() { return mongoClient; 70 } 71 72 public void setMongoClient(MongoClient mongoClient) { 73 this.mongoClient = mongoClient; 74 } 75 76 public MongoDatabase getMongodb() { return mongodb; 77 } 78 79 public void setMongodb(MongoDatabase mongodb) { 80 this.mongodb = mongodb; 81 } 82 88 /** * Adding data to the test database MongoDB Java: insertOne and 8 insertMany example. * Añadiendo datos a la base test de MongoDB con Java: ejemplos insertOne e insertMany . * @param args */ public static void main(String args[]){ JavaMongodbInsertData javaMongodbInsertData = new JavaMongodbInsertData(); javaMongodbInsertData.connectDatabase(); javaMongodbInsertData.insertOneDataTest(); } }

? 1 2 3 4 5 6 7 8

run: dic 13, 2015 11:38:51 AM com.mongodb.diagnostics.logging.JULLogger log INFORMACIÓN: Cluster created with settings {hosts=[127.0.0.1:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} dic 13, 2015 11:38:51 AM com.mongodb.diagnostics.logging.JULLogger log INFORMACIÓN: No server chosen by PrimaryServerSelector from cluster description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE,

7

9 all=[ServerDescription{address=127.0.0.1:27017, type=UNKNOWN, 10state=CONNECTING}]}. Waiting for 30000 ms before timing out dic 13, 2015 11:38:52 AM com.mongodb.diagnostics.logging.JULLogger 11log 12INFORMACIÓN: Opened connection [connectionId{localValue:1, serverValue:2}] to 127.0.0.1:27017 dic 13, 2015 11:38:52 AM com.mongodb.diagnostics.logging.JULLogger log INFORMACIÓN: Monitor thread successfully connected to server with description ServerDescription{address=127.0.0.1:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[2, 6, 10]}, minWireVersion=0, maxWireVersion=2, electionId=null, maxDocumentSize=16777216, roundTripTimeNanos=563900} dic 13, 2015 11:38:52 AM com.mongodb.diagnostics.logging.JULLogger log INFORMACIÓN: Opened connection [connectionId{localValue:2, serverValue:3}] to 127.0.0.1:27017 BUILD SUCCESSFUL (total time: 1 second)

Como puedes ver todo es información de la conexión ya que el método insertOne no devuelve ninguna información. En el siguiente apartado comprobaremos mediante el filtrado del dataset si se ha introducido correctamente este nuevo documento.

Añadiendo varios documentos insertMany Vamos a introducir ahora un conjunto de datos utilizando una lista: LinkedList dataList = new LinkedList(), primero añadimos un par de documentos a la lista como puedes ver en el código, y después hacemos un inserta de la misma en la base de datos utilizando el método getMongodb().getCollection(«restaurants»).insertMany(dataList), introduce el nuevo método en la clase creada anteriormente y comprueba el resultado actualizando y ejecutando el método main:

? 1 2 3 4 5 6 7 8 9 10 11 12 13

/** * We use the method insertMany to add a set of documents to the database example. * Usamos el método insertMany para añadir un conjunto de documentos a la base de datos de ejemplo. */ public void insertManyDataTest(){ try { DateFormat format = new SimpleDateFormat("yyyy-MMdd'T'HH:mm:ss'Z'", Locale.ENGLISH); // We create a List (Creamos una List). LinkedList dataList = new LinkedList(); // We add a document to the list (Añadimos un documento a la lista). dataList.add(new Document("address", asList( new Document()

8

.append("street", "Avenida 14 Castrelos 25 Bajo") 15 .append("zipcode", "36210") 16 .append("building", "180") 17 .append("coord", asList(18 73.9557413, 40.7720266)), new Document() 19 .append("street", "Urzáiz 77 Bajo") 20 .append("zipcode", "36004") 21 .append("building", "40") .append("coord", asList(22 73.9557413, 40.7720266)))) 23 .append("borough", "Vigo") 24 .append("cuisine", "Galician") 25 .append("grades", asList( 26 new Document() .append("date", 27 format.parse("2015-10-11T00:00:00Z")) 28 .append("grade", "A") 29 .append("score", 12), 30 new Document() 31 .append("date", 32 format.parse("2015-12-11T00:00:00Z")) .append("grade", "B") 33 .append("score", 18))) 34 .append("name", "Xules")); 35 dataList.add(new Document("address", 36 asList( new Document() 37 .append("street", "Avenida Ruz 383 Perez") 9 .append("zipcode", "30204") 40 .append("building", "50") .append("coord", asList(41 42 73.9557413, 40.7720266)))) .append("borough", "Ourense") 43 .append("cuisine", "Galician") 44 .append("grades", asList( new Document() 45 .append("date", 46 format.parse("2015-09-01T00:00:00Z")) 47 .append("grade", "A") 48 .append("score", 10), 49 new Document() .append("date", 50 51 format.parse("2015-12-01T00:00:00Z")) .append("grade", "B") 52 .append("score", 14))) 53 .append("name", "Código Xules")); // Now we insert all documents in the database (Ahora 54 55 introducimos todos los documentos en la base de datos). getMongodb().getCollection("restaurants").insertMany(dataLi 56 st); 57 } catch (ParseException ex) { Logger.getLogger(JavaMongodbInsertData.class.getName()).log (Level.SEVERE, null, ex); } }

9

Actualiza ahora el método main de la clase anterior para hacer una inserción múltiple, en el siguiente apartado comprobaremos el resultado:

? /** 1 * Adding data to the test database MongoDB Java: insertOne and 2 insertMany example. 3 * Añadiendo datos a la base test de MongoDB con Java: ejemplos 4 insertOne e insertMany . 5 **/@param args 6 public static void main(String args[]){ 7 JavaMongodbInsertData javaMongodbInsertData = new JavaMongodbInsertData(); 8 javaMongodbInsertData.connectDatabase(); 9 javaMongodbInsertData.insertManyDataTest(); 10}

Si quieres más información sobre la inserción de documentos, puedes obtenerla en el tutorial de MongoDB: Insert documents.

5. Consultas y filtros Utilizaremos el método de find para realizar una consulta para recuperar datos de una colección en MongoDB. Las consultas pueden devolver todos los documentos en una colección o sólo los documentos que coinciden con un filtro o criterio especificado.

Consulta sobre todos los documentos La consulta de todos los documentos de la base de datos será devuelta en una colección, así que es importante conocer su funcionamiento en Java para operar con los resultados, pero para hacer una prueba inicial simplemente ejecuta el código y entiende el funcionamiento. En este caso para devolver todos los documentos no aplicamos ningún filtro o criterio a la consulta, como veremos en el siguiente apartado. Ahora vamos a utilizar el método de búsqueda find() que devuelve los resultados de la consulta en un FindIterable, que será el objeto sobre el que haremos las iteraciones para obtener los documentos.

? FindIterable iterable = 1db.getCollection("restaurants").find(); 10

Con esto obtenemos los resultados en iterable, ahora simplemente los podemos manejar como un objeto más de Java.

? 1 package org.xulescode.mongodb; 2 3 import org.bson.Document; 4 import com.mongodb.Block; import com.mongodb.MongoClient; 5 import com.mongodb.client.FindIterable; 6 import com.mongodb.client.MongoDatabase; 7 8 /** 9 * Class tests for MongoDB queries by using collections. * Clase de pruebas para las consultas a MongoDB mediante el uso de 10 colecciones. 11 * @author xules 12 */ 13public class JavaMongodbList { private MongoClient mongoClient; // Java MongoDB client 14 (Cliente Java MongoDB) 15 private MongoDatabase mongodb; // Database object (Objeto 16base de datos) 17 /** * We establish the connection with the database test. 18 * Establecemos la conexión con la base de datos test. 19 */ 20 public void connectDatabase(){ 21 setMongoClient(new MongoClient()); setMongodb(getMongoClient().getDatabase("test")); 22 } 23 /** 24 * Get the list of all the restaurants (each is a document) in 25the database 26 * and shown on screen. * Obtenemos la lista de todos los restaurantes (cada uno es un 27 documento) 28 * de la base de datos y los mostramos por pantalla. 29 */ 30 public void listRestaurants(){ // To return all documents in a collection, call the find 31 32method without a criteria document. // Para devolver todos los documentos en una colección, 33 llamamos al método find sin ningún documento criteria 34 FindIterable iterable = 35getMongodb().getCollection("restaurants").find(); // Iterate the results and apply a block to each resulting 36 37document. // Iteramos los resultados y aplicacimos un bloque para cada 38documento. 39 iterable.forEach(new Block() { @Override 40 public void apply(final Document document) { 41 System.out.println(document); 42 } 43 }); 44 } public MongoClient getMongoClient() { 45 return mongoClient; 46 11

47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67} 68 69 70

} public void setMongoClient(MongoClient mongoClient) { this.mongoClient = mongoClient; } public MongoDatabase getMongodb() { return mongodb; } public void setMongodb(MongoDatabase mongodb) { this.mongodb = mongodb; } /** * We execute methods to display restaurants. * Ejecutamos los métodos para mostrar los restaurantes. * @param args */ public static void main(String args[]){ JavaMongodbList javaMongodbList = new JavaMongodbList(); javaMongodbList.connectDatabase(); // javaMongodbList.listRestaurants(); javaMongodbList.listRestaurantsByCuisine("Galician"); }

Filtrando por un documento Con el driver de Java podemos establecer condiciones de igualdad fácilmente con el documento de la siguiente forma new Document( , ). Si el es en un documento incrustado o una matriz utilizaremos los puntos para acceder al campo, ahora simplemente vamos a establecer nuestra primera condición de igualdad para el : cuisine y con el valuez< que le pasamos en el método listRestaurantsByCuisine(String cuisine). Actualiza la clase JavaMongodbList con el siguiente método:

? 1 2 3 4 5 6 7 8

/** * Obtenemos la lista de todos los restaurantes de la base de datos filtrando * por el tipo de cocina con el paso del parámetro cuisine y los mostramos por pantalla. * @param cuisine String data value to filter (valor para filtrar) */ public void listRestaurantsByCuisine(String cuisine){

12

// We return documents with the find method by setting a 9 criteria element equal to the cuisine. 10 // Devolvemos los documentos con el método find estableciendo un 11criteria igual para el elemento cuisine. 12 FindIterable iterable = 13getMongodb().getCollection("restaurants").find(new 14Document("cuisine", cuisine)); // Iterate the results and apply a block to each resulting 15document. 16 // Iteramos los resultados y aplicacimos un bloque para cada 17documento. iterable.forEach(new Block() { 18 @Override public void apply(final Document document) { System.out.println(document); } }); }

Ejecuta ahora el método de listRestaurantsByCuisine(String cuisine) modificando el método main:

? 1 2 3 4 5 6 7 8 9 10 11

/** * We execute methods to display restaurants. * Ejecutamos los métodos para mostrar los restaurantes. * @param args */ public static void main(String args[]){ JavaMongodbList javaMongodbList = new JavaMongodbList(); javaMongodbList.connectDatabase(); javaMongodbList.listRestaurantsByCuisine("Galician"); } }

Este será el resultado si todo ha ido bien:

?

Document{{_id=566d4f7f5eb618789e5af3b8, address=[Document{{street=Avenida Castrelos 25 Bajo, zipcode=36210, building=180, coord=[-73.9557413, 40.7720266]}}, Document{{street=Urzáiz 77 Bajo, zipcode=36004, building=40, coord=[73.9557413, 40.7720266]}}], borough=Vigo, cuisine=Galician, 1 grades=[Document{{date=Sun Oct 11 00:00:00 CEST 2015, grade=A, 2score=12}}, Document{{date=Fri Dec 11 00:00:00 CET 2015, grade=B, 3score=18}}], name=Xules}} 4Document{{_id=566d85dc5eb61804ead28d7e, address=[Document{{street=Avenida Castrelos 25 Bajo, zipcode=36210, building=180, coord=[-73.9557413, 40.7720266]}}, Document{{street=Urzáiz 77 Bajo, zipcode=36004, building=40, coord=[73.9557413, 40.7720266]}}], borough=Vigo, cuisine=Galician,

13

grades=[Document{{date=Sun Oct 11 00:00:00 CEST 2015, grade=A, score=12}}, Document{{date=Fri Dec 11 00:00:00 CET 2015, grade=B, score=18}}], name=Xules}} Document{{_id=566d85dc5eb61804ead28d7f, address=[Document{{street=Avenida Ruz Perez, zipcode=30204, building=50, coord=[-73.9557413, 40.7720266]}}], borough=Ourense, cuisine=Galician, grades=[Document{{date=Tue Sep 01 00:00:00 CEST 2015, grade=A, score=10}}, Document{{date=Tue Dec 01 00:00:00 CET 2015, grade=B, score=14}}], name=Código Xules}} BUILD SUCCESSFUL (total time: 3 seconds)

Hasta aquí ha llegado este tutorial, en el siguiente exploraremos las diferentes posibilidades de filtrado que nos ofrece el driver. Si quieres seguir explorando los métodos y las posibilidad del driver lo puedes consultar en Find or Query ...


Similar Free PDFs