我是Mongo的新手,我正试图利用聚合框架来完成聚合。
假设我在集合中有以下文件:
{name: "Sara", brandId: 1, count: 2 day:1/6/2014}//day value is ISODate
{name: "Sally", brandId: 1, count: 5 day:1/7/2014}
{name: "Mike", brandId: 1, count: 2, day: 1/8/2014}
{name: "Bob", brandId: 1, count: 4 day: 1/8/2014}
{name: "Joe", brandId: 1, count: 5 day:1/8/2014}
我想要做的是创建一个如下所示的报告(项目到文档):
给定日期范围:2014年1月7日 - 2014年1月8日
{
totalCount: 18,
countForTimePeriod: 11,
dailyAnalytics: [{
count : 5,
day: 7,
month: 1,
year: 2014
},
{
count : 2,
day: 8,
month: 1,
year: 2014
},
{
count : 4,
day: 8,
month: 1,
year: 2014
},
{
count : 5,
day: 8,
month: 1,
year: 2014
}]
}
totalCount =所有文档的计数汇总,按brandId分组 countForTimePeriod =日期范围内的计数聚合 dailyAnalytics =包含日期范围内天数的嵌入式文档数组。 (我可以搞清楚日期组件。我希望;))
我似乎找不到比分组和投影更基本的例子。到目前为止,我正在将这个系列分组到“白天”。和' brandId'。我不知道如何执行包含我日期范围之外的计算值的聚合,即totalCount& countForTimePeriod
我甚至都在苦苦挣扎。有人可以给我指点吗?
db.brandCollection.aggregate({$group:{
_id: {brandId: "$brandId", dayOfYear: "$day"},
Count: {$sum: "$count"}
}}
);