我看到你想要做的,閱讀你評論後更新。 有多種做法:)
從你在評論中提到的博客,你要做的是創建一個數組大小爲60(每秒)的單個文檔,這樣你可以用以下方式更新文檔:
db.metrics.update(
{
timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"),
type: 」memory_used」
},
{$set: {「values.59」: 2000000 } }
)
其中0.59是你要更新第二。所以只需調用每秒更新一次當UPSERT設置爲true的第一個更新創建文檔
當使用C#作爲你提到,你可以這樣做:
if (second==0){
//insert the "new" timestamped object into the collection
}
else{
var update = Builders<Metric>.Update.Set(e => e.values[second], this.getRandomMetric());
}
這應該給你一份文件, 59個項目的值數組。
但是,對於報告,這不是一個真正的去我認爲,爲什麼不把它存儲在一個單一的文件?
{
timestamp_minute: ISODate("2013-10-10T23:06:01.000Z"),
type: "memory_used",
value: 999999
},
{
timestamp_minute: ISODate("2013-10-10T23:06:37.000Z"),
type: "memory_used",
value: 1000000
},
timestamp_minute: ISODate("2013-10-10T23:06:59.000Z"),
type: "memory_used",
value: 2000000
}
如果你對有限的歷史感興趣,只是把它放在capped collection。您始終可以將平均值分組並將其放入其他集合中。爲此,您可以使用$out operator的聚合框架。例如,按照每小時每類型的值或類似的東西,不管什麼都適合你的需求;-)。
這是有點不清楚,我看到一個datetimestamp在「時間戳」和值。值是否增加(每分鐘)它只是一個值數組? – HoefMeistert
值每15分鐘遞增一次,這就是我想要達到的結構 –