db.foos.aggregate(
[
{ $project : { day : {$substr: ["$TimeStamp", 0, 10] }}},
{ $group : { _id : "$day", number : { $sum : 1 }}},
{ $sort : { _id : 1 }}
]
)
日付によるグループ化は、集計フレームワークの2つのステップで実行できます。並べ替えが必要な場合は、結果を並べ替えるために追加の3番目のステップが必要です。
-
$project
$substr
と組み合わせて 各ドキュメントからISODateオブジェクトの最初の10文字(YYYY:MM:DD)を取得します(結果は、フィールド「_id」および「day」を持つドキュメントのコレクションになります)。 -
$group
日ごとにグループ化し、一致するドキュメントごとに1を追加(合計)します。 -
$sort
前の集計ステップからの日である「_id」で昇順-これは、ソートされた結果が必要な場合はオプションです。
このソリューションでは、db.twitter.ensureIndex( { TimeStamp: 1 } )
のようなインデックスを利用できません。 、ISODateオブジェクトをその場で文字列オブジェクトに変換するためです。大規模なコレクション(数百万のドキュメント)の場合、これはパフォーマンスのボトルネックになる可能性があり、より高度なアプローチを使用する必要があります。