MongoDb .Net Series (III)


(Serie I)

(Serie II)

mongoDB-net.fw

 

En el anterior capítulo nos quedamos a punto de saber la diferencia entre una colección de MongoDb y una tabla de un gestor de SQL.

Bien, como ya sabéis, MongoDb es un gestor de bases de datos no relacionales o NoSql.

Bien, el concepto “no relacional”, implica que los datos no están estructurados, esto es, no tienen ni una estructura definida inicialmente, ni relaciones entre ellos. Esto, que podría parecer un despropósito, proporciona un nivel de velocidad de lectura y escritura desorbitados comparados con un gestor SQL. También permite al programador pensar directamente en objetos completos. Estos objectos completos, en terminología Mongo, se llaman Documentos.

Los documentos pueden tener las propiedades que se quiera, de hecho, pueden convivir en el mismo grupo o colección, documentos con diferente número y nombre de campos, a Mongo no le importa. Pues bien, ahí está, una colección, es un grupo de documentos. Si pensaramos en SQL, sería una tabla, pero con la rigidez del sistema, es decir, todos los registros tienen que tener el mismo número, nombre y tipo en los campos, hay campos obligatorios, etc. En una colección de Mongo, no existen estas restricciones. Piensa un momento en el follón que tienes que organizar cada vez que añades un campo en la base de datos. Pues en Mongo este follón se reduce a la mínima expresión.

Bien, después del rollo, vamos a ver un ejemplo. Como ya he dicho, un documento es un conjunto de propiedades, si lo pensamos en c#, podríamos asociar este documento a una clase.

Para simplificar el ejemplo, vamos a hacer una pequeña colección de electrodomésticos. Para ello, vamos, en nuestro programa, a definir una pequeña clase llamada Robot y otra pequeña clase llamada Reparación:

public class Robot
    {
        [BsonId(IdGenerator = typeof(CombGuidGenerator))]
        public Guid Id { get; set; }
        public string Nombre { get; set; }
        public string Marca { get; set; }
        public string Modelo { get; set; }
        public DateTime FechaDeCompra { get; set; }
        public bool EnGarantia { get; set; }
        public List<Reparacion> Reparaciones { get; set; } 
    }

    public class Reparacion
    {
        public DateTime Fecha { get; set; }
        public string Tecnico { get; set; }
        public string Descripcion { get; set; }
        public decimal Precio { get; set; }
    }

Como puedes ver, hemos añadido un atributo encima de la propiedad Id, esto va a hacer que auto-genere un Id.

Ahora vamos a decirle a nuestro programa que añada un robot a nuestra colección de Robots. Claro, te preguntarás, ¿pero ya?, ¿ya puedo insertar registros? La respuesta es sí. Cuando Mongo no encuentra la colección que estas intentando usar, la crea para ti.

Fíjate en como queda el programa:

    class Program
    {
        private const string ConnectionString = "mongodb://mongonetseriesuser:mongonetseriespassword@ds027748.mongolab.com:27748/mongonetseries";
        private const string DatabaseName = "mongonetseries";
        static void Main(string[] args)
        {
            var client = new MongoClient(ConnectionString);
            var server = client.GetServer();
            var database = server.GetDatabase(DatabaseName);

            var robotCollection = database.GetCollection<Robot>("Robots");
            var robot = new Robot
            {
                Marca = "Robotus",
                Modelo = "XS33",
                EnGarantia = false,
                FechaDeCompra = DateTime.Now.AddDays(-120),
                Nombre = "Mi robot",
                Reparaciones = new List<Reparacion>
                {
                    new Reparacion
                    {
                        Tecnico = "Pepe",
                        Descripcion = "No funciona",
                        Fecha = DateTime.Now.AddDays(-12),
                        Precio = 123.59
                    }
                }
            };
            robotCollection.Save(robot);

            Console.WriteLine("Robot salvado en la base de datos");
            Console.ReadKey();
        }
    }

Si te fijas en el código, verás que estamos obteniendo la colección de robots con esta línea:

var robotCollection = database.GetCollection<Robot>(“Robots”);

En ella le indicamos al driver que el nombre de la colección en MongoDb es o será Robots, y que va a almacenar objectos de la clase Robot.

Después puedes ver que simplemente instanciamos un objecto de la clase Robot (que contiene una lista de objetos de la clase Reparacion, y lo guardamos en su colección con la línea:

robotCollection.Save(robot);

Si abres el interfaz web de MongoLab, y miras dentro de la colección, verás que el objecto que nos ha creado es como este:

{
    "_id": {
        "$uuid": "4d603951-80c0-6a97-bf9f-5d0135a3c5b1"
    },
    "Nombre": "Mi robot",
    "Marca": "Robotus",
    "Modelo": "XS33",
    "FechaDeCompra": {
        "$date": "2014-01-24T22:12:45.266Z"
    },
    "EnGarantia": false,
    "Reparaciones": [
        {
            "Fecha": {
                "$date": "2014-05-12T21:12:45.268Z"
            },
            "Tecnico": "Pepe",
            "Descripcion": "No funciona",
            "Precio": 123.59
        }
    ]
}

Como podrás apreciar, se trata de un objeto JSON, concretamente, MongoDb guarda objetos BSON.

Hasta aquí cómo guardar documentos en MongoDb, como ves, es relativamente sencillo. En el próximo número, veremos como obtener esos documentos.

Anuncios

Un comentario en “MongoDb .Net Series (III)

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