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"] },

参考資料

その他

例のDynamoDBガッツリ使いたい案件、ある程度柔軟に検索するのであればMongoDBも視野に入る???