2013-11-04 68 views
0

在本文來自MongoDB博客「Schema Design for Time Series Data in MongoDB」中,作者建議將單個文檔中的多個時間序列值存儲爲基本時間戳(即每分鐘文檔數,秒數值)。可以使用聚合來查詢MongoDB文檔中的字段名稱嗎?

{ 
    timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"), 
    type: 「memory_used」, 
    values: { 
    0: 999999, 
    … 
    37: 1000000, 
    38: 1500000, 
    … 
    59: 2000000 
    } 
} 

所提出的模式聽起來像一個很好的,但他們沒有提到如何查詢,如果你想知道最近發生的樣品時,這將是需要的「值」字段名。

您將如何構建一個查詢來查找類似最近指標的時間(將時間戳分鐘和最高字段名稱組合在一起)?

非常感謝!

+0

我可能會建議你總是雙店,如果這是你想要做一個常見的查詢值:'「most_recent_value」' – WiredPrairie

回答

0

您可以直接查詢分鐘的文檔,然後使用一個循環將在客戶端 確定哪些時間戳已設置:

doc = c.find(...) 
var last = 0 
for (var i=0; i<60; i++) 
    if (i in doc.values) 
     last = i 

另一種方法這是一個小更高效的使用數組 代替爲每秒採樣的文檔,然後的使用 長度的數組來確定多少第二樣品已經 存儲:

doc = c.find(...) 
last = doc.values.length - 1 
0

我找到了答案,「可以在字段名稱查詢」在另一篇博客這表明遍歷鍵(布魯斯建議)只這樣的MapReduce的功能ALA:

var d = 0; 
    for (var key in this.values) 
     d = Math.max(d, parseInt(key)); 

對於MMS例如模式(在一個月timestamp_minute和標記天低於v值數組中的交換)這裏的數據和產生最近的指標日期查詢:

db.metricdata.find(); 

/* 0 */ 
{ 
    "_id" : ObjectId("5277e223be9974e8415f66f6"), 
    "month" : ISODate("2013-10-01T04:00:00.000Z"), 
    "type" : "ga-pv", 
    "v" : { 
     "10" : 57, 
     "11" : 49, 
     "12" : 91, 
     "13" : 27, 
     ... 
    } 
} 

/* 1 */ 
{ 
    "_id" : ObjectId("5277e223be9974e8415f66f7"), 
    "month" : ISODate("2013-11-01T04:00:00.000Z"), 
    "type" : "ga-pv", 
    "v" : { 
     "1" : 145, 
     "2" : 51, 
     "3" : 63, 
     "4" : 29 
    } 
} 

和地圖功能降低:

db.metricdata.mapReduce(
    function() { 
     var y = this.month.getFullYear(); 
     var m = this.month.getMonth(); 
     var d = 0; 

     // Here is where the field names used 
     for (var key in this.v) 
      d = Math.max(d, parseInt(key)); 

     emit(this._id, new Date(y,m,d)); 
    }, 
    function(key, val) 
    { 
     return null; 
    }, 
    {out: "idandlastday"} 
).find().sort({ value:-1}).limit(1) 

這將產生類似

/* 0 */ 
{ 
    "_id" : ObjectId("5277e223be9974e8415f66f7"), 
    "value" : ISODate("2013-11-04T05:00:00.000Z") 
} 
相關問題