[英]MongoDB C# Driver - How to InsertBatch using a List of Dictionary<string, string>
[英]How can I capture successes/failures/non-attempts with InsertBatch using the MongoDB C# Driver?
InsertBatch
方法返回一個IEnumerable<WriteConcernResult>
,我認為它將返回IEnumerable
結果列表,每個文檔的一個結果傳遞給InsertBatch
。
不是這種情況。 成功時,即使我將100個文檔傳遞給InsertBatch
方法,它也會返回一個WriteConcernResult
。 當出現錯誤時,該方法將引發異常,並且我無法確定插入了哪些記錄,哪些插入失敗以及未嘗試哪些文檔。
有沒有辦法可以捕獲這些信息?
具有兩個成功插入的示例
var myObjects = new List<MyObject>();
myObjects.Add(new MyObject{Id = 1234});
myObjects.Add(new MyObject{Id = 2345});
var results = myCollection.InsertBatch(myObjects, WriteConcern.Acknowledged);
// This only returns a single object, not two
foreach (var result in results)
{
Console.WriteLine("OK?: {0}", result.Ok);
}
具有2個成功插入,1個失敗,1個未嘗試的示例
var myObjects = new List<MyObject>();
myObjects.Add(new MyObject{Id = 3456}); // succeeds
myObjects.Add(new MyObject{Id = 4567}); // succeeds
myObjects.Add(new MyObject{Id = 4567}); // fails
myObjects.Add(new MyObject{Id = 5678}); // unattempted
// This throws a MongoDuplicateKeyException
var results = myCollection.InsertBatch(myObjects, WriteConcern.Acknowledged);
是否可以讓MongoDB C#驅動程序嘗試所有插入,然后僅報告失敗?
如果您正在執行批量插入並且確實出現錯誤,則程序將需要處理部分批量插入的可能性。 如果您的特定用例不關心丟失一些插入,則可以添加continue_on_error = True參數以插入,在這種情況下,插入將插入盡可能多的文檔,並在最后一次失敗的插入上報告錯誤。 (《 Mongodb應用設計模式》這本書的一部分)
var options = new MongoInsertOptions();
options.Flags = InsertFlags.ContinueOnError;
try
{
myCollection.InsertBatch(myObjects, options);
}
catch (Exception ex)
{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.