我有 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
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 param.当我尝试做这样的事情时:
var map = function() { if (!this[groupby]) { return; } for (index in this[groupby]) { emit(this[groupby][index], 1); } }
我收到TypeError:无法调用未定义的方法’find’.有没有办法创建这样的动态mapreduce函数?
谢谢.
编辑:
哇!我自己做.只需将范围参数传递给mapreduce参数,如范围:{keys:groupby}然后我就可以在map函数中执行var key = this [keys]并使用键变量而不是this.region.大!
哇!我自己解决了.我只是将范围参数传递给了mapreduce参数.scope:{keys: groupby}
然后我就能做到
var key = this[keys]
在map map函数中使用key变量而不是this.region.大!