2016-10-21 21 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

です。

例:更新

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

:あなたのサンプル入力文書に基づいて

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; 

シェル、あなたのように出力が得られますモンゴで試してみてください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

上記の**注** **を参照してください。私は明らかにエラーチェックをしていないと言いました。結果がない場合、エラーが発生します。私はあなたにエラー処理を残しています。 SOはコーディングサービスではありませんのでご注意ください。私たちは援助を求めていますが、課題を解決したり仕事をしたりすることはありません。 – Saleem

+0

私は理解しています、あなたのコードの問題は未定義です –