InsertBatch
方法返回IEnumerable<WriteConcernResult>
,我认为会返回IEnumerable
结果列表,每个文档传递给InsertBatch
一个结果。
事实并非如此。成功后,即使我将100个文档传递给WriteConcernResult
方法,它也会返回单个InsertBatch
。当出现错误时,该方法抛出异常,我无法分辨哪些记录被插入,哪些插入失败,以及哪些文档未被尝试。
有没有办法可以捕获这些信息?
有两个成功插入的示例
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#驱动程序尝试所有插入,然后只报告失败?
答案 0 :(得分:0)
如果您正在进行批量插入并且出错,那么您的程序将需要处理部分批量插入的可能性。如果您的特定用例并不关心缺少一些插入,您可以 添加continue_on_error = True参数以插入,在这种情况下插入将插入 尽可能多的文档,并报告最后一个失败的插入错误。 (Mongodb应用设计模式的一部分&#39;书&#39;)
var options = new MongoInsertOptions();
options.Flags = InsertFlags.ContinueOnError;
try
{
myCollection.InsertBatch(myObjects, options);
}
catch (Exception ex)
{
}