お世話になります。
MongoDBの aggregate を用いて、次のようにしてユーザーの日付毎の投稿数を集計しています。
JavaScript
1[ 2 { $match: { user: { $eq: user._id } } }, 3 { $project: 4 { date: { 5 day: { $dayOfMonth: '$created_at' }, 6 month: { $month: '$created_at' }, 7 year: { $year: '$created_at' } 8 } 9 } 10 { $group: { _id: '$date' }, count: { '$sum': 1 } } } 11]
これで次のような結果が取得できます。
JSON
1[{"id":{"day":4,"month":10,"year":2016},"count":1},{"id":{"day":3,"month":10,"year":2016},"count":1},{"id":{"day":2,"month":10,"year":2016},"count":6},{"id":{"day":1,"month":10,"year":2016},"count":4}]
ここで、ユーザーが毎日投稿している場合は良いのですが、ユーザーが投稿していない日があると、「0というcount値が含まれたデータ」が含まれて返ってくるのではなく、そもそもその日が集計されないためにその日だけ結果に含まれないことになってしまいます。
{"id":{"day":5,"month":10,"year":2016},"count":0}
のようなデータも含まれて欲しいのですが、これはMongoDBの aggregate 機能だけで実現できますでしょうか?
プログラムで加工すれば対処できるとは思いますが、できればMongoDB上で完結させたいのです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。