2012-05-22 58 views
2
的NodeJS我

有看起來像如何在MongoDB中使用一個變量的MapReduce與

{ 
    _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。任何不依賴於函數使用字符串的解決方案?

回答

2

是的,你可以通過一個 「範圍」 變量的MapReduce:

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

我會盡量今晚! – gmalette

+0

你怎樣才能到達::地圖內的上下文? - > this.context? – kjetildm

相關問題