sql >> Database >  >> NoSQL >> MongoDB

groepen per maand en jaar met behulp van mongoose.js

Mongoose biedt een lichtgewicht wrapper rond het MongoDB-aggregatieraamwerk. Als aggregatie nieuw voor u is, kunt u meer informatie over in vinden in de MongoDB-documenten:http:// /docs.mongodb.org/manual/aggregation/

Om uw gegevens in de vorm te masseren die u hierboven hebt beschreven, kunt u een aggregatiepijplijn gebruiken met een reeks $group-bewerkingen. Hier gebruikt het het mongoose-framework:

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

De eerste $group zal resulteren in documenten van dit formulier, één voor elke dag:

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

De tweede $group resulteert in documenten gegroepeerd per maand:

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

En de derde $groep zal resulteren in nog grotere documenten, één voor elk jaar.

Met deze query worden uw gegevens samengevoegd tot grote, hiërarchische documenten. Als u echter van plan bent om na aggregatie query's op deze gegevens uit te voeren, is dit misschien niet de meest bruikbare vorm voor uw gegevens. Bedenk hoe u de geaggregeerde gegevens gaat gebruiken. Een schema met meer kleinere documenten, misschien één per maand of zelfs één per dag, is misschien handiger.




  1. GSSException:geen geldige referenties verstrekt (mechanismeniveau:kan geen Kerberos-tgt vinden)

  2. Relatieve import van een pakket in python flask applicatie

  3. Hoe gebeurtenissen te gebruiken, houd mongodb-logica uit node.js-verzoekhandlers

  4. Socket.io-gebruikers tellen op horizontale servers