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?
谢谢。
编辑:
哇! 我自己做。 只需将scope
parameter passing给mapreduce参数,如下所示scope:{keys: groupby}
,然后我就可以在map函数中做var key = this[keys]
并使用key
variables来代替this.region
。 大!
哇! 我自己解决了。 我只是将一个范围parameter passing给mapreduce参数。
scope:{keys: groupby}
然后,我能够做到
var key = this[keys]
内部映射函数,并使用键variables而不是this.region。 大!