【问题标题】:MongoDB aggregation by array fieldMongoDB 按数组字段聚合
【发布时间】:2017-06-26 16:38:19
【问题描述】:

假设我的收藏包含如下文档:

{“电子邮件”:“jim@abc.com”,“fb”:{“名称”:{ "full" : "Jim Bent"} }, "apps": ["com.abc.1", "com.abc.2"]}

{“电子邮件”:“john@abc.com”,“fb”:{“名称”:{ “完整”:“约翰史密斯”}},“应用程序”:[“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 函数。所以我正在撞墙。

感谢任何建议。谢谢。

【问题讨论】:

  • 您是否使用任何驱动程序?

标签: mongodb aggregation-framework


【解决方案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

【讨论】:

  • 有没有可以导出到csv文件的?上面查询的结果超过了最大文档大小16MB,无法执行。
  • 如果这个操作超过 16MB 我不认为你可以做很多事情,并且 CSV 导出不会有任何区别。有关该限制 stackoverflow.com/a/14580774/687142 的详细说明,请参见此处。一种可能的解决方法是将您的查询拆分为多个范围有限的查询,然后在应用程序空间中重建结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 2013-03-19
  • 2019-05-10
  • 2014-02-27
  • 1970-01-01
相关资源
最近更新 更多