![](/img/trans.png)
[英]How can I capture successes/failures/non-attempts with InsertBatch using the MongoDB C# Driver?
[英]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.