簡體   English   中英

MongoDB C#驅動程序-如何使用字典列表進行InsertBatch <string, string>

[英]MongoDB C# Driver - How to InsertBatch using a List of Dictionary<string, string>

我是mongodb + C#驅動程序的新手,所以請原諒我的任何天真。

我正在嘗試對一組鍵值對進行批量插入,因此我的數據結構的類型為List<Dictionary<string,string>>

這是我的持久性代碼示例:

public void Persist(string collectionName, List<Dictionary<string, string>> documents)
{
  string connectionString = ConfigurationManager.ConnectionStrings[CONNECTION_STRING_KEY].ConnectionString;
  MongoServer server = MongoServer.Create(connectionString);
  MongoCredentials credentials = new MongoCredentials("MYUser", "MyPassword");
  MongoDatabase myDb = server.GetDatabase("myDb", credentials);

  var collection = myDb .GetCollection(collectionName);

  using (server.RequestStart(myDb ))
  {
    var result = collection.InsertBatch(documents);
  }
}

我收到有關序列化的錯誤:

MongoDB.Bson.BsonSerializationException:序列化器DictionarySerializer預期的DictionarySerializationOptions類型的序列化選項,而不是DocumentSerializationOptions類型。

我是否缺少設置?

編輯:更多信息

我的字典是我的實體。 意思是,我沒有創建保存屬性的對象,而是將它們轉儲到Dictionary 在mongo文檔中,似乎應該將其轉換為mongo Document

進一步編輯:扭曲問題

我可以通過將using語句更改為以下內容來插入單個實例:

using (server.RequestStart(myDb))
  {
    foreach(var doc in documents)
      collection.Insert(new BsonDocument(doc));
    //var result = collection.InsertBatch(typeof(Dictionary<string, string>), documents);
  }

但是,我擔心的是性能,因為在實際情況下,我很容易擁有超過10k的字典。 使用此代碼,驅動程序是否足夠聰明以進行批處理? 有沒有辦法保留InsertBatch但完成相同的事情?

當然,非常感謝您的幫助。

使用使用.Insert新代碼,驅動程序將不會批處理這些插入,並且您將獲得比InsertBatch大大降低的性能。

嘗試以下方法:

collection.InsertBatch(documents.Select(d => new BsonDocument(d)));

暫無
暫無

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

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