【发布时间】:2018-08-02 16:19:30
【问题描述】:
我有一个函数可以将条目列表插入到我的 MongoDB 数据库中,如下所示:
public static void TraceDatabaseInsert(string collection, List<BsonDocument> posts)
{
var connectionString = "mongodb://localhost:27017";
var client = new MongoClient(connectionString);
IMongoDatabase db = client.GetDatabase("TraceDatabase");
var coll = db.GetCollection<BsonDocument>(collection);
try
{
coll.InsertMany(posts);
}
catch (FormatException)
{
if (posts.Count == 1)
{
Console.WriteLine("Error: Trace to large to enter into database");
}
else
{
var postsList = SplitList(posts);
foreach (var entries in postsList)
{
coll.InsertMany(entries);
}
}
}
}
在极少数情况下,帖子太大而无法一次性插入并引发 FormatException,因此创建了一个将帖子一分为二的函数:
public static List<List<BsonDocument>> SplitList(List<BsonDocument> list)
{
var firstHalf = (int)Math.Ceiling(list.Count / 2.0);
var secondHalf = list.Count - firstHalf;
var returnList = new List<List<BsonDocument>>();
returnList.Add(list.GetRange(0, firstHalf));
returnList.Add(list.GetRange(firstHalf, secondHalf));
return returnList;
}
但是,当我尝试插入拆分列表时,我收到了 E11000 重复键错误形式的 MongoBulkWriteException。
这是由于初始操作在抛出异常之前插入了一些文档,所以我实际上是在尝试插入重复项吗?有谁知道解决这个问题的方法吗?
否则,可能是什么原因?
编辑:Here's an image of the local variables at the time of the exception being thrown
【问题讨论】:
-
posts.Count 在本例中为 189,新列表分别包含 95 和 94 个帖子。
标签: c# .net mongodb mongodb-.net-driver