2

誰かがこの問題を解決してくれることを願っています。ありがとう!

私は 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 }

誰かが私を正しい解決策に導いてくれることを願っています。どうもありがとう

4

0 に答える 0