sql >> Databasteknik >  >> NoSQL >> MongoDB

gruppera efter månad och år med mongoose.js

Mongoose ger en lätt omslag runt MongoDB-aggregationsramverket. Om du är ny på aggregering kan du lära dig mer om i MongoDB-dokumenten:http:/ /docs.mongodb.org/manual/aggregation/

För att massera in din data i formuläret du har beskrivit ovan kan du använda en aggregeringspipeline med en serie $group-operationer. Här använder den mongoose-ramverket:

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); 
           });
});

Den första $gruppen kommer att resultera i dokument av denna form, ett för varje dag:

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

Den andra $gruppen kommer att resultera i dokument grupperade efter månad:

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

Och den tredje $gruppen kommer att resultera i ännu större dokument, ett för varje år.

Den här frågan samlar dina data till stora, hierarkiska dokument. Om du planerar att köra frågor på denna data efter aggregering kanske detta inte är den mest användbara formen för din data att vara i. Fundera över hur du kommer att använda den aggregerade informationen. Ett schema som involverar fler mindre dokument, kanske ett per månad eller till och med ett per dag, kan vara bekvämare.




  1. Geospatial $nära inom aktuellt dokumentfältvärde

  2. Hur man använder Spring Boot med MongoDB

  3. Ta bort flera dokument från mongo i en enda fråga

  4. mongodb hur man får maxvärde från samlingar