C#MongoDB大容量Upsert-大容量写入操作导致一个或多个错误
本文关键字:大容量 一个 错误 Upsert- 操作 C#MongoDB | 更新日期: 2023-09-27 18:13:08
为什么会发生
因为在某些情况下,upstart无法自动生成_id用于正在操纵的对象。
解决方案A
在模型的_id字段中使用[BsonIgnoreIfDefault]。
解决方案B
您可以手动生成一个_id,然后使用ObjectId。生成新ID((
更多信息
这里和这里。
原始帖子
根据官方文件,我编写了这种方法。当我运行它时,我收到一条神秘的错误消息:"大容量写入操作导致一个或多个错误">。知道是什么原因造成的吗?一切看起来都很好。我已经有批量插入和删除方法工作正常。
public bool BulkUpsertReplaceOne (List<AppModel> records,
string collectionName)
{
try
{
var bulk = _database.
GetCollection(collectionName).
InitializeUnorderedBulkOperation();
foreach(AppModel am in records)
{
IMongoQuery mongoQuery = Query.EQ ("Url", am.Url);
bulk.Find (mongoQuery).Upsert().ReplaceOne(am);
}
bulk.Execute();
return true;
}
catch(Exception e)
{
logger.Info (e.Message);
}
}
编辑完整错误
at MongoDB.Driver.Operations.BulkWriteBatchResultCombiner.CreateResultOrThrowIfHasErrors (IEnumerable`1 remainingRequests) in <filename unknown>:line 0
at MongoDB.Driver.Operations.BulkMixedWriteOperation.Execute (MongoDB.Driver.Internal.MongoConnection connection) in <filename unknown>:line 0
at MongoDB.Driver.MongoCollection.BulkWrite (MongoDB.Driver.BulkWriteArgs args) in <filename unknown>:line 0
at MongoDB.Driver.BulkWriteOperation.ExecuteHelper (MongoDB.Driver.WriteConcern writeConcern) in <filename unknown>:line 0
at MongoDB.Driver.BulkWriteOperation.Execute () in <filename unknown>:line 0
at SharedLibrary.Wrappers.MongoDB.MongoDBWrapper.BulkUpsertReplaceOne (System.Collections.Generic.List`1 records, System.String collectionName) in <filename unknown>:line 0"
EDIT2
我不知道这是否相关,但如果我在错误发生后检查数据库,则只插入了批量追加的一个项目,并且具有ObjectId("000000000000000000000000"(。
版本:MongoDB 2.6.1,MongoC#驱动程序2.0.1
您的AppModel的id记录值似乎有问题。看起来它们丢失或全部为"000000000000000000000000">