我该如何操纵MapReduce的值字段?

时间:2012-09-05 15:24:24

标签: mongodb mapreduce

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

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

我可以使用:

访问_id和value字段
db.result.find() OR db.result.find({},{_id:1, value:1})

有没有办法选择 _ id sum_donations 而不选择 nbr_visitors ?像这样:

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

或者我应该创建另一个为我返回的MapReduce函数? 我正在考虑使用一个MapReduce集合并操纵它来回答不同的问题 我试过了

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

1 个答案:

答案 0 :(得分:1)

这样做有两个问题:

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

你可以(如果你使用MongoDB 2.2)在这里使用聚合框架和$project运算符,但我相信这会超级杀死并且会降低你的系统和程序的速度。

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