私はmongo dbとmapを初めて使用しています。この問題は残っています。 は、以下の私のコレクションの文書形式である: -mongo dbのMapReduceは大きなデータの入力を0にしています
私は50000個の文書が、50,00,000文書を持つコレクションへの帰国間違った結果をコレクションにそれをテストしたときに私のクエリが動作し`{
"_id" : ObjectId("57c9b650d803090f7e43864c"),
"imei" : "2670988969039437",
"model" : "XYX",
"cId" : "168",
"src" : "XYZZZ",
"feedback" : "downloaded_gcm",
"ts" : "2016-08-04 09:51:18"
}`
。以下
私のマップは、クエリを減らすです:
`
db.colectionNAme.mapReduce(
function() {
var key = this.model;
var val = {
installed : 0,
received : 0,
gcm_cancel : 0,
downloaded_gcm : 0,
gcm_acticated : 0,
gcm_ok : 0
};
if(this.feedback == "installed") {
val.installed++;
} else if(this.feedback == "received") {
val.received++;
} else if(this.feedback == "gcm_cancel") {
val.gcm_cancel++;
} else if(this.feedback == "downloaded_gcm") {
val.downloaded_gcm++;
} else if(this.feedback == "gcm_acticated") {
val.gcm_acticated++;
} else if(this.feedback == "gcm_ok") {
val.gcm_ok++;
}
emit(key, val);
},
function(key,values) {
var val = {
installed : 0,
received : 0,
gcm_cancel : 0,
downloaded_gcm : 0,
gcm_acticated : 0,
gcm_ok : 0
};
values.forEach(function(value) {
val.installed += value.installed;
val.received += value.received;
val.gcm_cancel += value.gcm_cancel;
val.downloaded_gcm += value.downloaded_gcm;
val.gcm_acticated += value.gcm_acticated;
val.gcm_ok += value.gcm_ok;
});
return val;
},
{
query:{cId : "166"},
out:"mapRedResults",
sort:{model:1},
jsMode: true,
usev8 :true
}
);`
、これは、それが与える出力されます: -
{
"result" : "mapRedResults",
"timeMillis" : 2221,
"counts" : {
"input" : 0,
"emit" : 0,
"reduce" : 0,
"output" : 0
},
"ok" : 1
}
をそのが..itが0の入力を取り、結果から明らかなように... 私はamazon t2.micro ec2インスタンスでそれをやっています。
あなたはまだ、より効率的に同じタスクの集計パイプラインを作成すると考えたことがありますか? http://stackoverflow.com/questions/37938257/get-count-of-loglevel-for-each-name/ – chridam
@chridam ...はい....私はすでに集約を使ってこれを行っています...しかし、私はmapreduceを使ってそれをやりたかった..... –
@chridam:あなたの提案に感謝しています。しかし、私が何をしているのか何かが間違っていると説明してください。私は本当に分かりません。そこにある欠陥.....私は毎日たくさんのデータを取得しており、インクリメンタルマップを使用したいので、マップを減らしたいと思っています。 –