如何在带有NodeJS的MongoDB中使用mapReduce变量

时间:2012-05-22 23:06:15

标签: node.js mongodb

我有一系列看起来像

的事件
{
  _id: BSONID
  name: "event_name",
  values: {a: 10, b: 1000, c: 50}
}

我正在尝试使用mapReduce使用

map = function() {
  return emit([this.name, this.values['a']], this.values['b']);
}

reduce = function(key, values) {
  // stuff
}

collection.mapReduce(map, reduce, { out: { inline: 1 } }, callback);

但是,我希望能够动态更改我映射的值。从本质上讲,我想要

var key = 'a';
var value = 'b';

map = function ()
{
  return emit([this.name, this.values[key]], this.values[value]);
}

问题是执行上下文没有传递给mongodb。任何不依赖于将字符串用于函数的解决方案?

1 个答案:

答案 0 :(得分:2)

是的,您可以将“范围”变量传递给MapReduce:

scope = {key : "a", value : "b"};
collection.mapReduce(map, reduce, {scope : scope, out: { inline: 1 } }, callback);