MongoDB c#文档中的自动增量键
本文关键字:文档 MongoDB | 更新日期: 2023-09-27 18:05:40
我想使用MongoDB测试实时数据系列性能,但我在更新文档时遇到了一些麻烦。
我想要像下面这样的结构:
{
timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"),
type: "memory_used",
values: {
0: 999999,
…
37: 1000000,
38: 1500000,
…
59: 2000000
}
}
的事情是,我似乎不能更新"值"BsonDocument相应,因为键和值都是整数。我试过了,但是运气不好。
任何帮助将不胜感激!谢谢。
我看到想要你想做的,看完你的评论后更新。有很多种方法:)
从你在评论中提到的博客,你所做的是创建一个数组大小为60(每秒)的单个文档,这样你就可以更新你的文档:
db.metrics.update(
{
timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"),
type: ”memory_used”
},
{$set: {“values.59”: 2000000 } }
)
其中。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
}
如果你对有限的历史感兴趣,就把它放在一个封顶的集合里。您可以将平均值分组并将它们放在另一个集合中。为此,您可以使用带有$out操作符的聚合框架。例如,将每小时每个类型的值分组或类似的东西,根据您的需要;-)。
所以我弄清楚了,不确定这是否是最好的方法,但它是有效的。希望它也能帮助到别人。
var update = Builders<Metric>.Update.Set(e => e.values["0"], this.getRandomMetric()).Inc(e => e.numberOfRecords, 1);