MongoDB (Parte III)

A decir verdad… no tenía pensado hacer la 3º parte de esta manera… pero ayudando a un compañero en la Universidad hice esta mini-aplicación. Y como funciona bien, me dio por subirla😀

Usando MongoDB con C# en Windows😀 qué tal ? xD

Suponiendo que ya tienen descargado Mongo para Windows, que ya crearon la carpeta C:\data\db\ , probaron el servidor y la shell ingresando datos, y descargaron el driver para C# seguimos con el tuto :D 

Crean un nuevo proyecto para C# en Visual Studio 2010. Yo lo hice a la rápida, por lo que tengo un windows forms. Supongo se puede con un WPF… pero no lo he probado😀

Una vez que tienen la solución abierta, agregamos las referencias de las .dll de los drivers que descargamos. Necesitamos 2: MongoDB.Bson y MongoDB.Driver . El primero es para usar los tipos de datos especiales que usa Mongo, y el segundo es el driver propiamente tal.

Entonces vamos a menú-Proyecto-Agregar Referencia y en la pestaña Buscar … buscamos los 2 .dll😯 y listo.

Agregando Referencias

Lo siguiente, y como para asegurarse, es ir a las propiedades del proyecto y en la pestaña de referencias agregar la carpeta donde tenemos los drivers.

Ruta Referencias

Ahora en el código del sistema, en las referencias simplemente agregamos

using MongoDB.Bson;
using MongoDB.Driver;

bajo los demás. Si los encontramos, ps entonces quedo bien😉

La aplicación que hicimos es super simple, solamente recoge los datos de una colección y los monta en una grilla. Algo así

Interfaz

Con el botón conectamos. leemos, mostramos. En el label muestro el estado de la conexión, y en la grilla aparecen los datos.

La info que usamos la pueden tener de aquí

use sistema
db.alumnos.save({Nombre: "Cesar", Edad: 21, Universidad: "Inacap"})
db.alumnos.save({Nombre: "Mario", Edad: 21, Universidad: "Inacap Iquique"})

Si… no estabamos muy imaginativos xD

Ok entonces una vez que tengan los datos ingresados desde la shell, volvemos a la aplicación. En el evento click del botón escribimos lo siguiente:

try
{
    MongoServer server = MongoServer.Create();
    server.Connect();
    label1.Text = "Estado Conexión: Conectado";
    MongoDatabase sistema = server.GetDatabase("sistema");
    MongoCollection<BsonDocument> alumnos = sistema.GetCollection<BsonDocument>("alumnos");
    var query = new QueryDocument();
    foreach (BsonDocument alumno in alumnos.Find(query))
    {
        grilla.Rows.Add(alumno["_id"].ToString(),
            alumno["Nombre"].ToString(),
            alumno["Edad"].ToString(),
            alumno["Universidad"].ToString());
    }
}
catch (Exception ex)
{
    label1.Text = "Estado Conexión: " + ex.Message;
}

Por línea tenemos:

  1. Creación del objeto server de la clase MongoServer. La instanciamos con el método Create() de la Clase MongoServer. Create() puede un String que contenga los datos de la conexión: con la siguiente forma:
    mongodb://[username:password@]hostname[:port][/[database][?options]]

    Si lo dejamos en blanco Create() la conexión se realiza con los valores por defecto(localhost:27017/test).

  2. Luego nos conectamos realmente al servidor con el método Connect() del objeto server.
  3. En el label1 escribo si estoy conectado realmente o no. Si la conexión no se realiza por estar el servidor abajo (por ejemplo) entramos al catch.
  4. Creo el objeto sistema de la clase MongoDatabase y le digo cuál es la base de datos que vamos a utilizar. En este caso sistema. Esto es lo mismo que hacer use sistema desde la shell.
  5. Instancio (o instansio?) la clase MongoCollection en alumnos. Esto es lo mismo que hacer un db.alumnos.algomás.
  6. Creamos un objeto que contenga la consulta a la BD. Así tal cual esta nos muestra todos los objetos en la colección. Es el equivalente a un db.alumnos.find().
  7. Un ciclo foreach para cada alumno que devuelva la consulta a la colección de alumnos. Como no le dimos ningún parámetro, nos devuelve todos.
  8. Extraemos los datos desde alumno (que recordemos es un BsonDocument, por lo que “funciona” con un Array común y silvestre) por cada columna y lo metemos en la grilla

Y eso es todo😀 Ejecutamos y  Deberían tener los mismos datos, salvo por el ID.

Ahora si quisieran filtrar los datos (por ejemplo buscar solo al que se llame cesar) en query al momento de instanciarla, en QueryDocument lo dejamos como QueryDocument(“Nombre”, “Cesar”);

Y eso sería todo😀

Agregar que todo esto lo hicimos con el tutorial de MongoDB

Acerca de MaritoCares

Ingeniero Informático. Con tendencias a la programación en [C#, VB].NET, Java(Web principalmente...), PHP, JavaScript, algo mínimo de [ruby, python], y el clásico C.
Esta entrada fue publicada en Aplicación, C#, MongoDB, Tutoriales. Guarda el enlace permanente.

13 respuestas a MongoDB (Parte III)

  1. Anónimo dijo:

    Hola mario, cuando creo el C:\data\db lo toma por defecto el mongo o que tengo que hacer para crear un archivo dentro de esa carpeta db.

    • MaritoCares dijo:

      El servidor de Mongo la usa por defecto.
      Si corres mongod.exe y se cierra solo, es porque no creaste bien la carpeta; si no se cierra, es porque esta todo ok y te va a crear un archivo que (no recuerdo bien) se llama mongo.lock.

      Una vez que ingreses la info desde la shell solo se crean los archivos en esa carpeta🙂

      Ahora yo tengo esto C:\Users\Mario Cares>ls C:\data\db\
      mongod.lock sistema.0 sistema.ns

      C:\Users\Mario Cares>

  2. Anónimo dijo:

    si ya me salio jajaja, gracias, ai van 100 pesos jajajaj

  3. Veronica Trejo dijo:

    hola!! muy buen tutorial, ya que no hay mucha información de como realizar una conexión con Mongodb, sin embargo me quedan dudas de como realizar todos lo procedimientos eliminaractualizar, etc.

    Espero puedas orientarme o ayudarme.
    Muchas gracias y muy buen aporte.

    • MaritoCares dijo:

      Claro !

      Primero, en qué lenguaje ?
      Segundo, si quieres saber cómo utilizar de manera rápida (en java) te recomiendo pases por este post https://danlaho.wordpress.com/2012/05/12/mongodb-y-java-usando-morphia/

      • Veronica Trejo dijo:

        MUCHÍSIMAS GRACIAS, ME GUSTARÍA SEGUIR INTENTANDO EN C#, DE HECHO SOBRE DE ESTE TUTO ME HE GUIADO BASTANTE PARA PODER REALIZAR UNA APLICACIÓN, LLEVO ALGUNOS AVANCES, PERO POR EJEMPLO TENGO QUE DESARROLLAR UNA APLICACIÓN CON CONEXIÓN PUNTO, PUNTO. ENTIENDO QUE APARTE DE LAS CONFIGURACIONES PROPIAS DE LAS COMPUTADORAS DENTRO DEL PROGRAMA SE TENDRÍA QUE MODIFICAR DONDE ESTA Create() Y AGREGAR EL IP?
        GRACIAS

      • MaritoCares dijo:

        Claro, tendría que ser algo así (suponiendo que el PC servidor tiene como IP 192.168.1.10 y en el puerto 99)
        Create(“mongodb://192.168.1.10:99/BASEDATOS”)

        Ahora, puedes hacerlo directo o con un archivo de configuraciones donde leas la información y luego lo conectes.
        O puedes crear una clase especial para mover a Mongo.

        De hecho, en varias partes recomiendan usar clases Singleton para las conexiones.

      • MaritoCares dijo:

        A todo esto, le hice una aplicación de prueba a unos compañeros en la universidad para que aprendan a usar Mongo (Consultas, Ingresos, Eliminación ).

        Si quieres te puedo mandar el código por mail.
        Eso si, la hice en VB .NET , pero con lo parecidos que son, debería funcionarte igual😀

      • Veronica Trejo dijo:

        Te agradecería mucho si me lo podrías enviar, de hecho solo me faltan algunos querys, te pongo un correo para que me lo envíes por favor; vero_vtp@hotmail.com.
        muchas gracias

  4. Pedro Ramirez dijo:

    Para poder eliminar un dato dentro de la base de datos solo se cambiaría el query? GRACIAS

    • MaritoCares dijo:

      Eliminar un documento es fácil también.
      Primero tienes que tener ubicada la Colección de la que quieres eliminar el dato y luego insertar el criterio.
      Por ejemplo, tenemos la colección alumno definida como un

      Private Alumno As MongoCollection

      Ahora que la tienes definida, llamas a “Remove” y le das el criterio.

      Me.Alumno.Remove(Query.EQ("nombre", "Mario"))

      O si quieres dejar una colección sin documentos, simplemente llamas a Remove y no le das ningún parámetro.

  5. joaquinlrz dijo:

    Marito, puedes explicarme que son los drivers en si; (los entiendo como instrucciones de un lenguaje para el manejo de mongo, (en lugar del shell de mongo)), o tienen otra funcion de conexion?. Programo en VFP9 y no veo driver, alguna opcion para usarlo en este lenguaje ?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s