0

各 MongoDB ドキュメントは次のようになります (この質問に関係のないプロパティは削除されています)。

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

集計クエリまたはマップ/リデュースを使用して、毎日、毎週、毎月レコードを持つユーザーの割合を計算する方法を見つけようとしています。

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 に答える