2016-03-08 46 views
1

我正在使用MongoDB網站上的餐廳數據集。文檔具有類似下面的數組:在MongoDB中按日期總結不同的等級

{ 
    "grades" : [ 
     { 
      "date" : ISODate("2014-06-10T00:00:00.000Z"), 
      "grade" : "A" 
     }, 
     { 
      "date" : ISODate("2013-06-05T00:00:00.000Z"), 
      "grade" : "B", 
      "score" : 7 
     }, 
     { 
      "date" : ISODate("2012-04-13T00:00:00.000Z"), 
      "grade" : "A" 
     }, 
     { 
      "date" : ISODate("2011-10-12T00:00:00.000Z"), 
      "grade" : "A" 
     } 
    ] 
} 

我試圖讓所有日期的列表,用多少每個年級的有那一天的計數。

我走了這麼遠:

db.restaurants.aggregate([{ 
    $unwind : { 
     path: '$grades' 
    } 
}, { 
    $group: { 
     _id: '$grades.date', 
     grades: { 
      $push: '$grades.grade' 
     } 
    } 
}]) 

這使我每個日期和當日的成績。

我現在如何計算每個獨特等級的數量?

回答

1

想通了感謝this question

該解決方案實際上是簡單得多,比我在想:

db.restaurants.aggregate([{ 
    $unwind : { 
     path: '$grades' 
    } 
}, { 
    $group: { 
     _id: { 
      date: '$grades.date', 
      grade: '$grades.grade' 
     }, 
     count: { 
      $sum: 1 
     } 
    } 
}]) 

這給像一個結果:

/* 1 */ 
{ 
    "_id" : { 
     "date" : ISODate("2014-06-23T00:00:00.000Z"), 
     "grade" : "C" 
    }, 
    "count" : 4 
} 

/* 2 */ 
{ 
    "_id" : { 
     "date" : ISODate("2011-11-01T00:00:00.000Z"), 
     "grade" : "C" 
    }, 
    "count" : 3 
} 

/* 3 */ 
{ 
    "_id" : { 
     "date" : ISODate("2014-05-06T00:00:00.000Z"), 
     "grade" : "A" 
    }, 
    "count" : 121 
} 

/* 4 */ 
{ 
    "_id" : { 
     "date" : ISODate("2012-08-21T00:00:00.000Z"), 
     "grade" : "C" 
    }, 
    "count" : 5 
} 

/* 5 */ 
{ 
    "_id" : { 
     "date" : ISODate("2013-09-04T00:00:00.000Z"), 
     "grade" : "C" 
    }, 
    "count" : 4 
}