0

每个 MongoDB 文档看起来像这样(删除了与此问题无关的属性):

{
    "user_id" : 12345,
    "created" : ISODate("2013-06-17T20:10:10.741Z")
}

试图弄清楚如何使用聚合查询或 map/reduce 计算每天、每周和每月都有记录的用户比例。

4

1 回答 1

0

我认为您不能一次轻松地计算出分数,但是您当然可以汇总每个括号(天、周或月)中有多少用户,尽管您必须运行聚合 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 }
    } }
] );

然后,您也可以计算分数。

于 2013-07-25T10:16:51.993 回答