0

使用 MapReduce 时,每个生成的文档“结果”的结构如下:

{ '_id'   : 123, 'value' :{'sum_donations' 999, 'nbr_visitors':50 }    

我可以使用以下方法访问 _id 和 value 字段:

db.result.find() OR db.result.find({},{_id:1, value:1})

有没有办法在不选择 nbr_visitors 的情况下选择_ idsum_donations?像这样的东西:

{'id': 123, 'sum_donation': 999}

还是我应该创建另一个 MapReduce 函数来为我返回它?
我正在考虑拥有一个 MapReduce Collection 并对其进行操作以回答不同的问题。
我试过

db.result.find({},{_id:1, value.sum_donations:1})  but it didn't work.
4

1 回答 1

1

这样做有两个问题:

  • MR的value字段目前无法从 MR 本身的 atm 进行操作,它有一个 JIRA,但它并不完全在“列表”上:https ://jira.mongodb.org/browse/SERVER-2517
  • Mongo 的查询语言无法自动将您的字段投影到顶级文档。子文档字段保留在子文档中。

您可以(如果您使用 MongoDB 2.2)在此处将聚合框架与$project操作员一起使用,但我认为这太过分了,并且会减慢您的系统和程序的速度。

因此,执行此操作的最佳方法是扩展您的编程以从该子文档中获取字段。这可能是执行此操作的最高效、最直接和最简单的方法,只需围绕它进行编码。

于 2012-09-05T15:38:53.380 回答