2014-10-30 26 views
0

首先狀態碼(「200」,「404」或其他)和時間(「1000」,「2000」..)不確定,當KEY不確定時,MongoDB嵌套文檔的總和是多少?

我想計算每個狀態碼的編號(5,6 ...)。

例如:{ 「200」:11},{ 「404」:11}或{ 「總」:22}

數據結構:

"_id" : "xxxxx" 
"domain" : "www.test.com" 
"status" : [ 
       {"200" : [ {"1000" : 5}, {"2000": 6} ...]}, 
       {"404" : [ {"1000" : 5}, {"2000": 6} ...]} 
       .... 
      ] 

MongoDB中任何奇妙的方法呢? 謝謝你的幫助

回答

2

請勿將數據(如日期)用作鍵。數據屬於值。 HTTP狀態代碼被列舉 - 你知道所有的可能性 - 所以你可以使用這些作爲鍵,如果你想。從文檔的外觀來看,您正在將請求信息存儲在頁面文檔中的頁面中,並將請求放入數組中。在文檔中擁有一個無限的,不斷增長的數組並不是一個好主意。我建議重構的數據與非規範化到每個地址請求的文件:

{ 
    "_id" : ObjectId(...), 
    "status" : 404, 
    "date" : ISODate("2014-10-30T18:23:09.471Z"), 
    "domain" : "www.test.com" 
} 

,然後你可以得到404所請求的總數量與聚集

db.requests.aggregate([ 
    { "$match" : { "domain" : "www.test.com" } }, 
    { "$group" : { "_id" : "$status", "count" : { "$sum" : 1 } } } 
]) 

到TEST.COM索引domain使其更快。

+0

是的,非常感謝。 – Leo 2014-10-31 04:38:42

0

我認爲你可以使用聚合框架來拉那樣的東西。

檢查: db.errors.aggregate([{$展開: 「$狀態」},{$組:{_id: 「$狀態」,總:{$總和:1}}}])

,它將使這樣的結果: ... 「結果」:[{ 「_id」:{ 「500」:[{ 「1000」:5 },{ 「 2000「:6 } ] }, 」total「:1 }, ...

「總計」字段包含您要查找的計數。

希望這會有所幫助。

問候!