sql >> Base de Datos >  >> NoSQL >> MongoDB

grupos por mes y año usando mongoose.js

Mongoose proporciona un contenedor ligero alrededor del marco de agregación de MongoDB. Si es nuevo en la agregación, puede obtener más información en los documentos de MongoDB:http:/ /docs.mongodb.org/manual/agregation/

Para masajear sus datos en el formulario que describió anteriormente, puede usar una canalización de agregación con una serie de operaciones de $group. Aquí está usando el marco mongoose:

var dateSchema = mongoose.Schema({…});
var DateItem = mongoose.model('DateItem', dateSchema);

DateItem.aggregate(
      { $group : { 
           _id : { year: { $year : "$accessDate" }, month: { $month : "$accessDate" },day: { $dayOfMonth : "$accessDate" }}, 
           count : { $sum : 1 }}
           }, 
      { $group : { 
           _id : { year: "$_id.year", month: "$_id.month" }, 
           dailyusage: { $push: { day: "$_id.day", count: "$count" }}}
           }, 
      { $group : { 
           _id : { year: "$_id.year" }, 
           monthlyusage: { $push: { month: "$_id.month", dailyusage: "$dailyusage" }}}
           }, 
      function (err, res)
           { if (err) ; // TODO handle error 
             console.log(res); 
           });
});

El primer $grupo dará como resultado documentos de esta forma, uno para cada día:

{ 
  "_id" : { "year" : 2013, "month" : 8, "day" : 15 },
  "count" : 1
}

El segundo $grupo dará como resultado documentos agrupados por mes:

{
  "_id" : { "year" : 2012, "month" : 11 },
 "dailyusage" : [
          { "day" : 6, "count" : 1 },
          { "day" : 9, "count" : 1 },
          ... ]
},

Y el tercer $grupo dará como resultado documentos aún más grandes, uno para cada año.

Esta consulta agregará sus datos en grandes documentos jerárquicos. Sin embargo, si planea ejecutar consultas sobre estos datos después de la agregación, esta podría no ser la forma más útil para que estén sus datos. Considere cómo usará los datos agregados. Un esquema que involucre más documentos más pequeños, tal vez uno por mes o incluso uno por día, podría ser más conveniente.