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

C#MongoDB大容量Upsert-大容量写入操作导致一个或多个错误

您的AppModel的id记录值似乎有问题。看起来它们丢失或全部为"000000000000000000000000">