誰かがこの問題を解決してくれることを願っています。ありがとう!
私は MYSQL のログ パーサーで作業しています。このタスクでは、PHP5.310 を使用して mysql ログを解析し、収集した情報を次の構造として mongodb に保存します。
"_id" : "12345",
"Host" : "localhost",
"Connect" : "XXXXX@localhost on AUT_IND",
"Time_Con" : ISODate("2013-01-21T02:50:08Z"),
"Quit" : "Quit",
"Time_Quit" : ISODate("2013-01-21T02:50:09Z"),
"Num_Query" : 2,
"Query" : [
"SET NAMES utf8",
"SELECT * FROM XX
]
コレクション全体でクエリのトップ 10 を取得しようとしています。私はこのM / Rを使用しました:
function emit(k, v) {
print("emit");
print(" k:" + k + " v:" + tojson(v));
}
メートル=
function () {
this.Query.forEach(function (z) {emit(z, 1);});
}
r=
function (key, values) {
var total = 0;
for (var i in values) {
total += values[i];
}
return total;
}
}
そして、map reduce db.XXXXX.mapReduce(m,r,{out:"results"}) は、Num_queries が 3k を超える場合を除いて、正しい結果をもたらします。
たとえば、このコレクションには「Num_Query」: 116287 のドキュメントが 1 つあります。
したがって、116287クエリの配列があります。M/R を行ったときにエラーが発生したのはここです。
ここにエラーログがあります:
Fri Feb 8 12:07:00 キャッチされない例外: map reduce に失敗しました:{ "errmsg": "例外: _id は配列にすることはできません"、"code": 10099、"ok": 0 }
誰かが私を正しい解決策に導いてくれることを願っています。どうもありがとう