MongoDBで集計した上にガッチャンコするやつ
やりたいこと
MongoDBにざっくり以下のようなデータがある。
{ groupId: "aaa", lang: "en", data: "hoge" }, { groupId: "aaa", lang: "ja", data: "ほげほげ" }, { groupId: "bbb", lang: "en", data: "fuga" }, { groupId: "bbb", lang: "fr", data: "titi" }, ...
こいつをもとに、以下のように集計したデータを作りたい。
{ groupId: "aaa", langs: ["en", "ja"] }, { groupId: "bbb", langs: ["en", "fr"] }, ...
やりかた
以下の通り。$group
と$push
を使えば良い。
> db.hoge.aggregate([ ... { $group: { _id: "$groupId", langs: { $push: "$lang" } } }, ... { $sort: { groupId: 1 } } ... ]) { groupId: "aaa", langs: ["en", "ja"] }, { groupId: "bbb", langs: ["en", "fr"] },
参考資料
- 以下の回答そのまんま。
- Aggregation ー MongoDB Manual
$group
$push
その他
例のDynamoDBガッツリ使いたい案件、ある程度柔軟に検索するのであればMongoDBも視野に入る???