MapReduce中的MongoDBdynamicvariables

我有用于mongodb mapreduce的node.js路由器:

app.get('/api/facets/:collection/:groupby', function(req, res) { var collection = db.collection(req.params.collection); var groupby = req.params.groupby; var map = function() { if (!this.region) { return; } for (index in this.region) { emit(this.region[index], 1); } } var reduce = function(previous, current) { var count = 0; for (index in current) { count += current[index]; } return count; } var options = {out: groupby + '_facets'}; collection.mapReduce(map, reduce, options, function (err, collection) { collection.find(function (err, cursor) { cursor.toArray(function (err, results) { res.send(results); }); }) }) }); 

这很好。 但是我想用我的groupby参数。 当我尝试做这样的事情:

  var map = function() { if (!this[groupby]) { return; } for (index in this[groupby]) { emit(this[groupby][index], 1); } } 

我收到TypeError: Cannot call method 'find' of undefined 。 有没有办法创build这样的dynamicmapreducefunction?

谢谢。

编辑:

哇! 我自己做。 只需将scopeparameter passing给mapreduce参数,如下所示scope:{keys: groupby} ,然后我就可以在map函数中做var key = this[keys]并使用keyvariables来代替this.region 。 大!

哇! 我自己解决了。 我只是将一个范围parameter passing给mapreduce参数。

 scope:{keys: groupby} 

然后,我能够做到

 var key = this[keys] 

内部映射函数,并使用键variables而不是this.region。 大!