每个 MongoDB 文档看起来像这样(删除了与此问题无关的属性):
{
"user_id" : 12345,
"created" : ISODate("2013-06-17T20:10:10.741Z")
}
试图弄清楚如何使用聚合查询或 map/reduce 计算每天、每周和每月都有记录的用户比例。
每个 MongoDB 文档看起来像这样(删除了与此问题无关的属性):
{
"user_id" : 12345,
"created" : ISODate("2013-06-17T20:10:10.741Z")
}
试图弄清楚如何使用聚合查询或 map/reduce 计算每天、每周和每月都有记录的用户比例。
我认为您不能一次轻松地计算出分数,但是您当然可以汇总每个括号(天、周或月)中有多少用户,尽管您必须运行聚合 3 次。
首先,对于这一天:
db.so.aggregate( [
{ $group: {
_id: {
y: { $year: '$created' },
m: { $month: '$created' },
d: { $dayOfMonth: '$created' }
},
count: { $sum: 1 }
} }
] );
第二个月:
db.so.aggregate( [
{ $group: {
_id: {
y: { $year: '$created' },
m: { $month: '$created' },
},
count: { $sum: 1 }
} }
] );
最后一年:
db.so.aggregate( [
{ $group: {
_id: { $year: '$created' },
count: { $sum: 1 }
} }
] );
将其与集合的不同用户计数相结合:
db.so.aggregate( [
{ $group: {
_id: null,
count: { $sum: 1 }
} }
] );
然后,您也可以计算分数。