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相应,因为键和值都是整数。我试过了,但是运气不好。

任何帮助将不胜感激!谢谢。

MongoDB c#文档中的自动增量键

我看到想要你想做的,看完你的评论后更新。有很多种方法:)

从你在评论中提到的博客,你所做的是创建一个数组大小为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);