jueves, 7 de mayo de 2020

MongoDB y C#

Vamos a crear una aplicación en VS2019 MVC que pueda conectarse de manera fácil a una base de datos de mongo.

Para este ejemplo vamos a utilizar una base de datos de Atlas que nos permite tener una sola de 500MB gratis. Ya si se desea tener mayor capacidad o más bases de datos se requiere de pagar por el uso de estas.

Bueno en este momento vamos a crear una aplicación de MVC con VS2019.

Después de crear el proyecto nuevo debemos instalar los siguientes paquetes desde Nuget



Lo que tenemos que hacer ahora es crear un folder nuevo llamado Repository. En este folder vamos a crear las clases necesarias para poder interactuar con nuestra base de datos. Primero desarrollaremos una interfaz con los métodos base para las operaciones sobre la base de datos, estas operaciones serian buscar documento, borrar documento, actualizar documento y agregar documentos. El nombre de nuestra interfaz seria IMongoInteraction.

Para poder construir el código necesario de cada una operación debemos crear una clase llamada MongoInteraction esta clase debe implementar la interfaz. Dentro de esta clase vamos a construir el código necesario para poder interactuar con la base de datos.

Nosotros vamos a trabajar con un documento que lo podemos definir en una clase POCO que en nuestro caso llamamos MongoDocument (esta puede tener cualquier otro nombre). Para este ejemplo la clase no tiene propiedades, sin embargo, para poder trabajar ya con mongo debemos agregar las propiedades que deseamos guardar en los documentos.

MongoInteraction requiere un constructor el cual nos permite inicializar la conexión de la base de datos, agregar el nombre de nuestra base de datos y la colección que deseamos usar para manipular los documentos.

 

En este momento la manipulación de los documentos es muy fácil y siempre vamos a utilizar el objeto _collection que ya tiene todo lo necesario para poder trabajar sobre la colección de datos.

Como podemos observar en la línea 23 para borrar un documento hacemos uso de _collection y el método DeleteOneAsync, este ultimo requiere de un filtro para saber cuales datos queremos borrar. Lo mismo con el método de buscar lo único que se necesita es el filtro. Ahora para poder crear un documento debemos crear un objeto de la clase MongoDocument (POCO) que tiene los atributos del documento y enviar esto al método InsertOneAsync. Finalmente, el método para actualizar o remplazar un documento requiere primero el filtro del documento que deseamos reemplazar y la información del nuevo documento que se quiere usar de ahora en adelante. Ya con esto podemos hacer las operaciones en la colección de mongo.

 

Ahora nos vamos a ir al controlador Home donde vamos a ver como llamar las operaciones para trabajar con nuestra base de datos. En la línea 17 creamos una variable que nos permite manejar la clase con las operaciones en todo el controlador. Como se puede ver en el constructor de la clase se pasa por referencia un objeto de tipo IMongoInteraction, este es el que se asigna en la línea 23.

Con todo esto preparados seguimos a la línea 26 donde tenemos un método llamado Index. Aquí se puede observar en la línea 29 como creamos el filtro para cargar datos de nuestra colección de mongo. Se define el filtro y se pasa al método de buscar en la línea 30. Este nos debe retornar un objeto de tipo MongoDocument. Para cualquier otra operación se debe crear un filtro igual que en la línea 29 claro cambiando lo que se desea filtrar, es decir, cualquier otra propiedad o propiedades.

Nos queda pendiente un último paso para poder utilizar mongo, el cual debemos desarrollar en la clase Startup

En este paso se debe agregar la línea 24 donde usando la variable service agregamos un objeto de IMongoInteraction, esto usando el método AddSingleton. Nada mas recordar que para este objeto se debe pasar la conexión string para nuestro ejemplo lo estamos llamando del appsettings.

De esta manera tenemos una aplicación web con acceso a una base de datos de mongodb.


Ejemplo


Etiquetas: , , ,

jueves, 15 de febrero de 2018

Java y MongoDB

Vamos a ver qué fácil trabajar con Java y Mongo. Para nuestro ejemplo vamos a usar una base de datos desarrollada en MLab (pueden usar este documento para ver cómo funciona). Para poder trabajar con los documentos vamos a crear objetos en Java de tipo POJO y luego estos los podemos guardar en nuestra base de datos.

Primero vamos hacer una pequeña aplicación en Java. Esta le vamos a llamar Agenda.

Para que el proyecto funcione vamos a requerir agregar dos librerias a nuestro projecto. La primera es mongo-java-drive-3.4.2.jar y bson-3.5.0.jar


Cuando tenemos esto listo vamos a crear dos paquetes uno llamado Mongo y otro POJO. En el paquete de mongo vamos a tener el código y la configuración necesaria para conectarnos a nuestra base de datos. Mientras que en la de POJO solo una clase que nos permite almacenar la información que deseamos guardar.


Vamos a estudiar primero la clase mongoBase en esta clase tenemos la configuración básica para nuestro base de datos.

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import static com.mongodb.client.model.Filters.eq;
import org.bson.Document;

Como vemos lo primero que tenemos que hacer es importar las librerías que vemos de la línea anteriormente. 

private final MongoClientURI uri;
private final MongoClient mongoClient;
private final MongoDatabase database;
private final String collectionName;

Vamos a declarar 4 variables para la configuración básica de nuestro sistema.

uri: esta va a tener la dirección de nuestra base de datos

mongoClient: vamos a inicializarla con la dirección de nuestra base de datos

database: esta variable tiene el nombre de nuestra base de datos

collectionName: con esta variable guardamos el nombre de la colección para guardar nuestros datos.


public mongoBase(final String collectionName) {
        this.collectionName=collectionName;
        uri = new MongoClientURI("mongodb://<user>:<password>@ds123698.mlab.com:23698/agenda");
        mongoClient = new MongoClient(uri);
        database = mongoClient.getDatabase("agenda");
}

Ahora debemos inicializar las variables en el constructor. La primera es la dirección de la base de datos. Esta dirección la podemos encontrar en nuestra configuración en mLab.


public <T> void saveDocument(T objectToSave)
{
     MongoCollection collection =  database.getCollection(collectionName);
     collection.insertOne(getDocument(objectToSave));
}

Continuamos con el método saveDocument con el que vamos a poder guardar cualquier documento en nuestra base de datos. Por el momento solo vamos a guardar documentos de personas.

Vamos a inicializar una variable de tipo MongoCollection usando la colección que deseamos usar para almacenar los datos.

Ahora vamos a usar la variable collection que acabamos de hacer y utilizando el método insertOne vamos a guardar nuestra información.


protected abstract <T> Document getDocument(T objectToSave);

Para crear el documento que deseamos guardar en nuestra base de datos de mongo debemos utilizar el método getDocument. Este método se debe sobrescribir.


Ahora vamos a la clase AgendaController en esta clase vamos a especializar la clase base de mongo para poder manejar nuestros objetos de tipo Person.


public AgendaController() {
   super("AgendaCollection");
}
En el constructor de la clase le vamos a pasar el nombre de nuestra colección para que se establezca de manera global en nuestra clase base mongoBase.


@Override
public <T> Document getDocument(T objectToSave) {
     Person contact = (Person) objectToSave;

     Document doc = new Document("name", contact.getName())
                .append("phone", contact.getPhone())
                .append("email", contact.getEmail())
                .append("lastName", contact.getLastName())
                .append("cellPhone", contact.getCellPhone());
     return doc;
}
Debemos a sobreescribir el método getDocument de la clase base. Este método va a crear los documentos de tipo Person que vamos a guardar en nuestra base de datos. Como vemos en el método se pasa por parámetro el objeto que deseamos guardar.

Luego lo convertimos a un objeto de tipo Person y luego extraemos la información de sus variables. Con la variable doc que es de tipo Document vamos a crear nuestro documento para guardarlo en la base de datos. Como vemos agregamos cada una de las propiedades al documento cuando este esta listo con un return enviamos el documento listo.


public List<Document> getDocuments(final String name, final String lastName) {
    MongoCollection<Document> collection = super.getDatabase().getCollection("AgendaCollection");

    List<BasicDBObject> obj = new ArrayList<BasicDBObject>();

    obj.add(new BasicDBObject("name", name));
    obj.add(new BasicDBObject("lastName", lastName));
    BasicDBObject whereQuery = new BasicDBObject();
    whereQuery.put("$and", obj);
    List<Document> documents = collection.find(whereQuery).into(new ArrayList<Document>());
    return documents;
}
En esta clase también tenemos el método getDocuments que nos permite hacer búsquedas en nuestra base de datos de mongo. Nuestro método va hacer búsquedas usando el nombre y apellido de la persona.

Para hacer la búsqueda vamos hacer una referencia de la colección donde se encuentran nuestros datos. Esto lo hacemos con la variable collection.

Luego vamos a tener una lista de tipo BasicDBObject que llamamos obj. En este objeto vamos a agregar los filtros para buscar nuestros datos. Cuando agregamos todos los datos que queremos usar para filtrar creamos una variable que llamamos whereQuery que también es un BasicDBObject en vamos agregar la función “and” y la lista con los criterios de búsqueda.

Ahora llamando el método find de la variable collection vamos a ejecutar la búsqueda. En el método find agregamos la variable whereQuery que ya preparamos con todo lo necesario para buscar documentos. Los resultados serán almacenados en la varible List para poder hacer lo que sea con ellos.

Finalmente, en el main creamos un objeto nuevo de tipo Person y luego creamos un objeto de tipo AgendaController con nombre agenda. Hacemos llamado al método saveDocument y le pasamos el objeto person para que sean guardados en la base de datos. Ahora ejecutamos el método getDocument y le pasamos el nombre de la persona que creamos para ver si se guardo en la base de datos. 

Ejemplo completo

Etiquetas: , ,

viernes, 2 de febrero de 2018

Una opción gratis de mongoDB


Las bases de datos no relaciones han tomado mucha fuerza en los últimos años y entre estas esta MongoDB. La cual está basada en documentos de Json. En muchas ocasiones no tenemos los recursos para pagar por productos de los que no estamos seguros como funciona o si se alinea a las tecnologías de nuestra compañía. Pero con mLab tenemos una opción para poder probar y jugar con mongo de manera gratuita. Incluso si tenemos un sistema pequeño podemos usarlo con mLab de manera gratuita con una base de datos en la nube. Este es un motor de base de datos muy rápido y es de modelo o estructura flexible que nos permite almacenar los documentos de Json con todo tipo de datos.

No tenemos que instalar nada en nuestras computadoras para poder iniciar a trabajar con mongo y podemos acezarla desde cualquier computadora con Internet.

Primero debemos entrar a la página de mLab. La base de datos que podemos trabajar de manera gratuita es de 500 MB pero suficiente para poder entender un poco mejor como funciona.

Podemos ver los planes que tiene mLab

Para nuestro ejercicio vamos a usar el Sandbox gratis. Ahora lo primero que debes hacer es crear una cuenta nueva en mLab.

Cuando estamos en la cuenta de mLab vamos a ver un menú como el siguiente:

Vamos a dar clic en el botón de “create new” para poder crear nuestra base de datos
Debemos de usar la que dice sandbox

En la parte inferior va a salir un botón que dice “continue” le damos clic y luego seleccionamos una región y finalmente clic en “continue” nuevamente.

Debemos darle un nombre a la base de datos y clic en “continue” y luego al último paso que es clic “submit order”

Listo ya tenemos nuestra base de datos.

Ahora vamos a agregar una colección a nuestra base de datos. Para esto vamos a dar clic sobre la base de datos donde vamos a ver el siguiente menú.
  
Le damos clic al botón de “Add collection”

En este menú vamos a agregar el nombre de la colección y le damos clic a créate. Con este ya tenemos lista la primera colección donde vamos a poder guardar los documentos de Json.

Ya tenemos listo todo para iniciar a agregar documentos. Si le damos clic al botón a la colección podemos guardar documentos en esta.

Si entramos a la colección de datos vamos a ver un menú como este



Si le damos clic al botón “Add document” ya podemos agregar cualquier documento con formato Json. Desde este menú vamos a poder ver documentos, borrarlos, editarlos o agregar documentos nuevos.

Muy pronto vamos a tener un nuevo blog para ver cómo podemos trabajar con esta base de datos y java. 


En este link se puede encontrar mucha más información relacionada a mongoDb. 

Etiquetas: