簡體   English   中英

如何使用MongoDB C#驅動程序通過InsertBatch捕獲成功/失敗/非嘗試?

[英]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.

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