1

mongo db に Web アプリケーション エラーが報告されたとします。それらを (URL でグループ化して) 取得するには、次のクエリを使用します。

db.errors.group({
    cond: {
        date:{
            $gt:new Date(2013,0,3, 6, 0, 0), 
            $lt:new Date(2013,0,3, 8, 0, 0)
        }
    },
    key: {
        url: 1
    },
    initial: {
        csum: 0
    },
    reduce:
        function(obj, prev) {
            prev.csum++;
        }
})

エラーを(ページの URL ではなく)サイトの URLでカウントしたい場合はどうすればよいですか? つまり、http://www.mysite.com/page1http://www.mysite.com/page2は同じバケットにカウントされます。理想的には、何らかの形でクエリのセクションの関数になるでしょう...key

4

2 に答える 2

3

既存のドキュメント フィールドに依存するのではなく、必要なサイト URL キーを作成する関数を指定するには、keyf代わりにkeyin yourを使用します。group

ドキュメントを参照してください。

于 2013-01-06T15:18:50.683 に答える
1

JohnnyHKの答えを拡張するには:

db.errors.group({
    cond: {
        date:{
            $gt:new Date(2013,0,3, 6, 0, 0),
            $lt:new Date(2013,0,3, 8, 0, 0)
        }
    },
    keyf: function(doc)
    {
        return { site: doc.url.match(/.*:\/\/[^\/]+/i)[0]};
    },
    initial: {
        csum: 0
    },
    reduce:
        function(obj, prev) {
            prev.csum++;
        }
})

戻り値:

[
    {
        "site" : "http://www.mysite.com",
        "csum" : 3
    },
    {
        "site" : "http://www.example.com",
        "csum" : 1
    }
]

ただし、大規模なデータセットでは高速にはなりません。domainエラーを生成するコードを制御する場合は、グループ化できるフィールドを追加する方が簡単かもしれません。

于 2013-01-06T15:47:23.747 に答える