簡體   English   中英

C#中的MongoDB自動遞增鍵

[英]MongoDB auto-increment key in Document C#

我想使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM