4
MongoDB的動態變量,我對MongoDB的MapReduce的node.js的路由器:中的MapReduce
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
。有什麼辦法可以創建這樣的動態mapreduce函數嗎?
謝謝。
編輯:
哇!我自己做。只需將scope
param傳遞給mapreduce參數,如scope:{keys: groupby}
,然後我就可以做var key = this[keys]
裏面的map函數,並用key
變量代替this.region
。大!
你應該發佈並接受你的答案。 – generalhenry 2013-03-18 22:42:15
@generalhenry同意它將在未來幫助他人,請張貼答案並接受OP :) – Sammaye 2013-03-18 22:57:28