viernes, 27 de enero de 2012

Mongodb MapReduce Code Example



        public static DataTable VentasPorPeliculaPorTanda(string codigoinicio, string codigofin,
                                             string fechainicio, string fechafin,
                                             string salainicio, string salafin)
        {
            BsonJavaScript map = "function() {" +
                                    "          emit({Pelicula: this.Pelicula, CodigoPelicula: this.CodigoPelicula, Sala: this.Sala, CodigoSala: this.CodigoSala, NombreTanda: this.NombreTanda, Entrada: this.Entrada, Tanda : this.Tanda, Precio: this.Precio}, {Entradas: 1, TotalEntradas: this.Precio , Precio: this.Precio});" +
                                    "}";
            BsonJavaScript reduce2 = "function(key, values) {" +
                                    "    var result = {Entradas: 0, TotalEntradas: 0.0 , Precio: 0.0 };" +
                                    "    values.forEach(function(value) {" +
                                    "          result.Entradas += value.Entradas;" +
                                    "          result.TotalEntradas += value.TotalEntradas;" +
                                    "          result.Precio = value.Precio;" +
                                    "    });" +
                                    "    return result;" +
                                    "}";
            IMongoQuery QuerySala;
            if (salainicio == salafin)
                QuerySala = Query.EQ("CodigoSala", Convert.ToInt32(salainicio));
            else
                QuerySala = Query.GTE("CodigoSala", Convert.ToInt32(salainicio)).LTE(Convert.ToInt32(salafin));


            BsonDateTime fechaini = BsonDateTime.Create(Convert.ToDateTime(fechainicio + " 00:00:00 AM").ToUniversalTime());
            BsonDateTime fechafi = BsonDateTime.Create(Convert.ToDateTime(fechafin + " 23:59:59 PM").ToUniversalTime());


            MapReduceResult Result = VariablesGlobales.EnithDB.GetCollection("VentaPeliculas").MapReduce(
                                     Query.And(Query.GTE("Tanda", fechaini).LTE(fechafi),
                                               Query.GTE("CodigoPelicula", Convert.ToInt32(codigoinicio)).LTE(Convert.ToInt32(codigofin)),
                                               QuerySala, Query.EQ("Estado", "Pagado")),
                                               map, reduce2, MapReduceOptions.SetOutput(MapReduceOutput.Inline));


            IEnumerable doc1 = Result.GetResults();
            DataTable ResultT = new DataTable();
            ResultT.Columns.Add("Pelicula");
            ResultT.Columns.Add("CodigoPelicula");
            ResultT.Columns.Add("Sala");
            ResultT.Columns.Add("CodigoSala");
            ResultT.Columns.Add("Entrada");
            ResultT.Columns.Add("Precio");
            ResultT.Columns.Add("Tanda");
            ResultT.Columns.Add("NombreTanda");
            ResultT.Columns.Add("Entradas");
            ResultT.Columns.Add("TotalEntradas");
            BsonElement value;
            foreach (BsonDocument doc2 in doc1)
            {
                BsonDocument datospeli = (BsonDocument)(doc2["_id"]);
                BsonDocument datosentrada = (BsonDocument)(doc2["value"]);
                DataRow row = ResultT.NewRow();
                row["Pelicula"] = datospeli.TryGetElement("Pelicula", out value) ? datospeli["Pelicula"].ToString() : "";
                row["CodigoPelicula"] = datospeli.TryGetElement("CodigoPelicula", out value) ? Convert.ToInt32(datospeli["CodigoPelicula"].ToString()) : 0;
                row["Sala"] = datospeli.TryGetElement("Sala", out value) ? datospeli["Sala"].ToString() : "";
                row["CodigoSala"] = datospeli.TryGetElement("CodigoSala", out value) ? Convert.ToInt32(datospeli["CodigoSala"].ToString()) : 0;
                row["Entrada"] = datospeli.TryGetElement("Entrada", out value) ? datospeli["Entrada"].ToString() : "1";
                row["Entradas"] = datosentrada.TryGetElement("Entradas", out value) ? datosentrada["Entradas"].ToString() : "1";
                row["Precio"] = datosentrada.TryGetElement("Precio", out value) ? datosentrada["Precio"].ToString() : "";
                row["Tanda"] = datospeli.TryGetElement("Tanda", out value) ? datospeli["Tanda"].ToString() : "";
                row["NombreTanda"] = datospeli.TryGetElement("NombreTanda", out value) ? datospeli["NombreTanda"].ToString() : "";
                row["TotalEntradas"] = datosentrada.TryGetElement("TotalEntradas", out value) ? datosentrada["TotalEntradas"].ToString() : datosentrada["Precio"].ToString();
                ResultT.Rows.Add(row);
            }


            return ResultT;


        }


       

No hay comentarios:

Publicar un comentario

Páginas de ayuda sobre temas variados