如何使用mongodb';s聚合或映射/减少,计算每天、每周和每月都有记录的用户比例

如何使用mongodb';s聚合或映射/减少,计算每天、每周和每月都有记录的用户比例,mongodb,Mongodb,每个MongoDB文档如下所示(删除与此问题无关的属性): 试图找出如何通过聚合查询或映射/减少来计算每天、每周和每月都有记录的用户的分数。我不认为您可以一次轻松计算分数,但您当然可以聚合每个括号(天、周或月)中的用户数尽管您必须运行聚合三次 首先,今天: db.so.aggregate( [ { $group: { _id: { y: { $year: '$created' }, m: { $month: '$creat

每个MongoDB文档如下所示(删除与此问题无关的属性):


试图找出如何通过聚合查询或映射/减少来计算每天、每周和每月都有记录的用户的分数。

我不认为您可以一次轻松计算分数,但您当然可以聚合每个括号(天、周或月)中的用户数尽管您必须运行聚合三次

首先,今天:

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 }
    } }
] );
然后你也可以计算分数

db.so.aggregate( [
    { $group: {
        _id: null,
        count: { $sum: 1 }
    } }
] );