2012-11-28 136 views
1

Newbe問題如何查詢MongoDB。我想在每天收到多個對象並將它們彙總到一天記錄中。文檔結構最終將包含有價值的數據爲365天(每年,每年一個新的文檔可能)按以下格式:mongodb時間序列數據建模

{ 
"2012": { 
    "9": { 
     "1": { 
      "attribute1": 42.1, 
      "attribute2": 5.895, 
      "attribute3": 2347, 
      "attribute...n": 33076.875, 
      "startFuel": [ 
       32976.75, 
       33018.875, 
       33041.375 
      ], 
      "startOdometer": [ 
       202748.9, 
       202973, 
       203100.2 
      ], 
      "endOdometer" : 209855.6 
     }, 
     "10": { 
      "attribute1": 363.90000000000003, 
      "attribute2": 59.242000000000004, 
      "attribute3": 20284, 
      "attribute...n": 34335.375, 
      "startFuel": [ 
       34161, 
       34214.125, 
       34245.25, 
       34280.875 
      ], 
      "startOdometer": [ 
       209855.6, 
       210166.4, 
       210348.2, 
       210555.7 
      ], 
      "endOdometer" : 210655.7 
     } 
    } 
}, 
"_id": ObjectId("50b6838a6ef6585a9e51f2af"), 
"key1": null, 
"keu2": -1, 
"key3": 572755 
} 

正如你所看到的,每個文檔屬於一個實體,一年中包含每個月和每個月都有每天(只要有那天/每月/每年的數據)。

我在如何查詢此文檔格式掙扎。我希望使用聚合框架來平均文檔中的值(針對單個實體),並在同一時間段內將其聚合到多個文檔/實體中。

例如,我想找到8月份每天駕駛的平均里程數(對於每個實體而言,對於該月中的每一天,從endOdometer中減去最低的startOdometer並將該月的值平均) 。 (順便說一句:startOdometer是一個數組,允許我在不預先查詢文檔的情況下推送這些值,看它是否已經存在)。

我們在內部進行辯論,無論我們是否需要使用map/reduce來創建所有聚合視圖到我們的數據中,或者我們可以使用map/reduce創建日摘要並使用聚合框架來拉動數據在一起。我想知道這個數據結構如何支持這種類型的查詢,或者其他什麼樣的數據結構可能更適合我們利用匯總框架來總結我們的數據。

+2

像這樣的動態模式很難查詢。將模式修改爲使用固定鍵名稱並將動態內容保留爲值會更好。 – JohnnyHK

+0

你說「將他們彙總成日記錄」,但你說文檔將包含一年的數據 - 你能澄清嗎? –

+0

對不起,在處理另一個問題之前,我沒有看到您的回覆。這個想法是,一份文件將包含數年的數據,按天分解。 – pherris

回答

1

像這樣的動態模式很難查詢。將模式修改爲使用固定鍵名稱並將動態內容保留爲值會更好。