MongoDB按阵列字段聚合

时间:2014-02-02 16:41:01

标签: mongodb aggregation-framework

假设我的收藏包含以下文件:

  

{“email”:“jim@abc.com”,“fb”:{“name”:{                   “full”:“Jim Bent”}},“apps”:[“com.abc.1”,“com.abc.2”]}

     

{“email”:“john@abc.com”,“fb”:{“name”:{                   “full”:“John Smith”}},“apps”:[“com.abc.1”,“com.abc.3”]}

我想编写一个查询并通过输出电子邮件的csv文件将其导出,fb.name.full按整个集合中的“apps”数组字段进行分组。 那就是:对于“com.abc.1”,它输出Jim Bent的电子邮件和John Smith以及电子邮件。 对于“com.abc.2”,它只输出Jim Bent,而对于“com.abc.3”,它只输出John Smith。

我已经研究了一下,但是mongoexport不允许复杂的查询,我也无法编写$ unwind函数。所以我正在撞墙。

任何建议表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Javascript和mongo shell通过使用以下代码创建文件(例如:myquery.js)来执行此操作:

printjson(
  db.collection.aggregate([
   {$unwind: '$apps'},
   {$group: { _id: '$apps', info: { '$push': { email: '$email', name: '$fb.name.full'}}}},
   {$project: {app: '$_id', info: 1, '_id': 0}}
  ]))

然后您可以从命令行执行查询:

mongo database myquery.js