映射/缩小和排序嵌套文档

时间:2012-03-10 04:14:32

标签: mongodb mapreduce

我有一个关于Map / Reduce的问题在mongodb中对内部文档进行排序。 该计划如下:

{
    "_id" : 16,
    "days" : {
      "1" : 123,
      "2" : 129,
      "3" : 140,
      "4" : 56,
      "5" : 57,
      "6" : 69,
      "7" : 80
}

所以现在我的问题是: 如何从上述数据中总结一些特定的日子。 举个例子:

我想总结第1,3和7天的值,得到结果。 我尝试了解决方案 MapReduce aggregation based on attributes contained outside of document但是没有取得任何成功。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:3)

MapReduce是一个循环遍历一堆文档并执行操作的操作。我不完全确定它正是你想要的,但可能你发布了一个更简单的真实问题。在任何情况下,以下代码通过为单个文档发出3次,使用文档的_id作为reduce函数的键。

doc = {_id : 16, days : { 1 : 123, 2 : 129, 3 : 140, 4 : 56, 5 : 57, 6 : 69, 7 : 80 }};
db.so.insert(doc);

map = function() {
  emit(this._id, this.days["1"]);
  emit(this._id, this.days["3"]); 
  emit(this._id, this.days["7"]); 
}

reduce = function (k, vals) {
  var sum = 0;
  vals.forEach(function (v) {sum += v;});
  return sum;
}

res = db.so.mapReduce(map, reduce, {out : {inline : 1}});
res.find();