MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

grupuje według miesiąca i roku za pomocą mongoose.js

Mongoose zapewnia lekkie opakowanie wokół struktury agregacji MongoDB. Jeśli nie masz doświadczenia w agregacji, możesz dowiedzieć się więcej o in z dokumentów MongoDB:http:// /docs.mongodb.org/manual/aggregation/

Aby przekazać dane do formularza opisanego powyżej, możesz użyć potoku agregacji z serią operacji $group. Tutaj używa struktury mangusty:

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

Pierwsza grupa $ spowoduje powstanie dokumentów w tej formie, po jednym na każdy dzień:

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

Druga $group spowoduje pogrupowanie dokumentów według miesiąca:

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

A trzecia grupa $ zaowocuje jeszcze większymi dokumentami, po jednym na każdy rok.

To zapytanie zagreguje Twoje dane w duże, hierarchiczne dokumenty. Jeśli jednak planujesz uruchamiać zapytania na tych danych po agregacji, może to nie być najbardziej przydatna forma przechowywania danych. Zastanów się, w jaki sposób będziesz używać zagregowanych danych. Schemat zawierający więcej mniejszych dokumentów, być może jeden na miesiąc lub nawet jeden na dzień, może być wygodniejszy.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Spring boot / mongo nie utworzy indeksu z adnotacją indeksu

  2. Wdrażanie i konserwacja MongoDB przy użyciu Ansible

  3. Złożone sortowanie Mongo?

  4. Szukaj w całej kolekcji (mongodb) za pomocą nodejs

  5. Meteor przy użyciu Azure MongoDB