2013-08-27 16 views
1

我正在嘗試創建一個動態映射函數 - 即使用任意字段進行聚合。我想我可以使用閉包,但它不起作用 - 我得到一個錯誤,說明等等沒有定義。在Mongoose Map函數中沒有拾取的值關閉

我的測試代碼 -

o.map = (function(){ 
     var blah = 'skill'; 
     var mapIt = function() { 
      for (var idx = 0; idx < this[blah].length; idx++) { 
       var key = this.skill[idx]; 
       var val = 1; 
       emit(key, val); 
      } 
     } 
     return mapIt 
    })() 

問候, 肖恩

+0

這似乎工作 - o.scope = {'blah':blah}; – user1781563

回答

2

所以在地圖功能實際上得到經由功能toString(源代碼形式)通過線路發送到MongoDB的用於內部mongodb的本身執行(不是節點)。因此,這不起作用。這是scope選項的用途。任何需要作爲上下文/參數/範圍提供給地圖/縮減作業的數據都需要在scope對象中設置。

+0

感謝Peter的洞察力,我認爲可能是這種情況,甚至試圖使用eval構建一個動態值硬編碼的函數 - 但hapi似乎並不喜歡它。 – user1781563

0

看起來你必須手動設置範圍 -

o.scope = { '等等':等等};