質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Q&A

解決済

1回答

2271閲覧

日別の集計で対象が無い場合は0を含めたい

syuilo

総合スコア393

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

0グッド

0クリップ

投稿2016/10/05 07:19

編集2016/10/05 07:21

お世話になります。

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上で完結させたいのです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

こちらに同じような質問がありました:
http://stackoverflow.com/questions/27045259/how-to-return-count0-in-an-aggregation-if-there-is-no-match

どうやらできないみたいです。

投稿2016/10/05 07:33

syuilo

総合スコア393

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問