2016-10-21 188 views
0

我想使用mapReduce函數以數組的形式返回我的集合中每個對象的字段。這些是我收藏的文件。MapReduce函數MongoDB NodeJs

{ _id: '1', name: 'a' }, 
{ _id: '2', name: 'b' }, 
{ _id: '4', name: 'c' }, 
{ _id: '5', name: 'd' }, 
{ _id: '6', name: 'e' }, 
{ _id: '7', name: 'f' } 

現在我想導致這種形式[ 'A', 'B', 'C', 'd', 'E', 'F']。我如何實現它,我嘗試過mapReduce,但無法以這種方式獲得結果。

這是我的代碼

collection.mapReduce(function EachBranch() { 
     emit(this.name, this.value); 
     }, function (key, values) { 
     },{ out: { inline: 1 } }); 

回答

1

你需要值遍歷在減速和期望形式變換結果。

實例:嘗試在蒙戈外殼

db.collection.mapReduce(
    function() { 
    emit(1, this.name) 
    }, 
    function(k,v){ 
    var result = {}; 
    result.names = v; 
    return result; 
    }, 
    {out: {inline:1}} 
).results[0].value.names; 

根據您的樣品輸入文檔,你會得到輸出:

[ "a", "b", "c", "d", "e", "f" ] 

更新:Node.js的解決方案:

collection.mapReduce(
    function() { 
     emit(1, this.name) 
    }, 
    function (k, v) { 
     var result = {}; 
     result.names = v; 
     return result; 
    }, 
    { out: { inline: 1 } }, 
    function (err, result) { 
     assert.equal(null, err); 

     if (result) { 
      console.log(result[0].value.names); 
     } 
     db.close(); 
    } 
); 

注:我沒有處理任何錯誤,所以請做防禦性編碼。

+0

我得到「無法讀取屬性'0'的未定義」 –

+0

請參閱上面的** ** NOTE **。我明確提到我沒有做任何錯誤檢查。如果沒有結果,你會得到錯誤。我正在離開錯誤處理。請注意,SO不是一個編碼服務。我們在這裏幫助但不解決任務或工作。 – Saleem

+0

我明白了,問題出在您的代碼中,結果是undefined –