sql >> Database teknologi >  >> NoSQL >> MongoDB

grupper efter måned og år ved hjælp af mongoose.js

Mongoose giver en let indpakning omkring MongoDB-aggregationsrammerne. Hvis du er ny til aggregering, kan du lære mere om i MongoDB-dokumenterne:http:/ /docs.mongodb.org/manual/aggregation/

For at massere dine data ind i den form, du har beskrevet ovenfor, kan du bruge en aggregeringspipeline med en række $group-operationer. Her bruger den mongoose-rammen:

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ørste $group vil resultere i dokumenter af denne form, et for hver dag:

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

Den anden $gruppe vil resultere i dokumenter grupperet efter måned:

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

Og den tredje $gruppe vil resultere i endnu større dokumenter, et for hvert år.

Denne forespørgsel vil samle dine data i store, hierarkiske dokumenter. Hvis du planlægger at køre forespørgsler på disse data efter aggregering, er dette muligvis ikke den mest nyttige form for dine data at være i. Overvej, hvordan du vil bruge de aggregerede data. Et skema, der involverer flere mindre dokumenter, måske et om måneden eller endda et om dagen, kan være mere praktisk.




  1. MongooseJS - Sådan gemmer du dokument og refererede dokument

  2. Faye eller Redis Pubsub

  3. Sådan sletter du nøgler, der matcher et mønster, ved hjælp af Redis

  4. Spring RedisConnectionFactory med transaktion, der ikke returnerer forbindelse til Pool og blokerer derefter, når den er opbrugt