各 MongoDB ドキュメントは次のようになります (この質問に関係のないプロパティは削除されています)。
{
"user_id" : 12345,
"created" : ISODate("2013-06-17T20:10:10.741Z")
}
集計クエリまたはマップ/リデュースを使用して、毎日、毎週、毎月レコードを持つユーザーの割合を計算する方法を見つけようとしています。
各 MongoDB ドキュメントは次のようになります (この質問に関係のないプロパティは削除されています)。
{
"user_id" : 12345,
"created" : ISODate("2013-06-17T20:10:10.741Z")
}
集計クエリまたはマップ/リデュースを使用して、毎日、毎週、毎月レコードを持つユーザーの割合を計算する方法を見つけようとしています。
一度に分数を簡単に計算できるとは思いませんが、もちろん、集計を 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 }
} }
] );
その後、分数も計算できます。