2

私はしばらくMongoDbを使用しており、素晴らしいと思います. 次の Activity オブジェクトがあります。

[ Activity ]
"_id"       : ObjectId("518a6c18e4b079d18de65b6e"),
"userUrl"   : "http://news.bbc.co.uk",
"userAddress"   : "1.2.3.4",
"requestTime"   : ISODate("2013-05-08T15:15:35.780Z"),
"status"    : "success"

注: ステータス フィールドには、「エラー」、「使用不可」など、約 5 つの異なる値があります。

そのため、現在、負荷に関する高レベルのレポートを作成している段階ですが、グループ化機能に問題があります。たとえば、次のテスト データを挿入するとします。

db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 01, 2013'), "status": "success"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 01, 2013'), "status": "success"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 01, 2013'), "status": "error"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 01, 2013'), "status": "unavailable"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 02, 2013'), "status": "success"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 02, 2013'), "status": "error"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 02, 2013'), "status": "error"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 02, 2013'), "status": "unavailable"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 02, 2013'), "status": "unavailable"})

...そして、この関数を実行します...

db.activity.group(
{
    $keyf : function(doc) {
        return { "date" : doc.requestTime.getDate() + "/" + doc.requestTime.getMonth() + "/" + doc.requestTime.getFullYear()};
    },
    initial: { count:0 },
    reduce: function(obj, prev) { prev.count++; }
})

... この結果が得られます ...

[
    {
        "date" : "1/0/2013",
        "count" : 4
    }, 
    {
        "date" : "2/0/2013",
        "count" : 5
    }
]

これは、日付だけでグループ化するのに非常にうまく機能します。 私の質問は、ステータスの日付 (日ごと) でグループ化するにはどうすればよいですか? たとえば、次のようなものを取得するのが理想的です: -

[
    {
        "date" : "1/0/2013",
        "success" : 2,
        "error": 1,
        "unavailable": 1
    },                   
    },
    {
        "date" : "2/0/2013",
        "success" : 1,
        "error": 2,
        "unavailable": 2
    }
]

... また ...

[
    {
        "date" : "1/0/2013",
        status: [
            "success" : 2,
            "error": 1,
            "unavailable": 1
        ]
    },                   
    },
    {
        "date" : "2/0/2013",
        status: [
            "success" : 1,
            "error": 2,
            "unavailable": 2
        ]   
    }
]
4

1 に答える 1