0

私は、MongoDB 内でも mapReduce と集計に少し慣れていません。

データセットの例を次に示します。

{ "_id" : ObjectId("521002161e0787522098d110"), "userId" : 4545454, "pickId" : 1, "answerArray" : [  "yes" ], "city" : "New York", "state" : "New York" }
{ "_id" : ObjectId("521002481e0787522098d111"), "userId" : 64545454, "pickId" : 1, "answerArray" : [  "no" ], "city" : "New York", "state" : "New York" }
{ "_id" : ObjectId("521002871e0787522098d112"), "userId" : 78263636, "pickId" : 1, "answerArray" : [  "yes" ], "city" : "Albany", "state" : "New York" }
{ "_id" : ObjectId("5211507c1e0787522098d113"), "userId" : 78263636, "pickId" : 2, "answerArray" : [  "yes" ], "city" : "New York", "state" : "New York" }
{ "_id" : ObjectId("5211507c1e0787522098d113"), "userId" : 78263636, "pickId" : 1, "answerArray" : [  "yes" ], "city" : "Wichita", "state" : "Kansas" }

州、都市、pickId、answerArray の一意の値のリストを取得し、それらの一意の組み合わせを数えたいと考えています。結果は次のようになります。

{"pickId": 1, "city": "New York", "state": "New York", "answerArray": ["yes"], "count":2}
{"pickId": 1, "city": "Albany", "state": "New York", "answerArray": ["no"], "count":1}
{"pickId": 1, "city": "New York", "state": "New York", "answerArray": ["no"], "count":1}
{"pickId": 1, "city": "Wichita", "state": "Kansas", "answerArray": ["yes"], "count":1}

私が抱えている問題は、mapReduce が 2 つの引数しかとらないことです。

Error: fast_emit takes 2 args near...

しかし、複数の一意の値を 1 つの pickId にマップしようとしています。

私が見ているmapReduceのコードは次のとおりです。

var mapFunct = function() {
if(this.answerArray == "yes"){
emit(this.pickId,1);}
else{
emit(this.pickId,0);};}

var mapReduce2 = function(keyPickId,answerVals){ 
return Array.sum(answerVals);};

db.answers.mapReduce( mapFunct, mapReduce2, { out: "mapReduceAnswers"})

任意のヘルプまたはさらなる提案をいただければ幸いです。集約フレームワークも調べましたが、必要な種類の出力が得られるとは思えません。

4

1 に答える 1