繁体   English   中英

Azure MongoDB API 大容量插入

[英]Azure MongoDB API Bulk Insert

我目前将 Azure Mongo API 用于 documentDB。 然而,这给我们带来了很多麻烦,例如将文档插入数据库并试图在InsertMany()期间忽略重复的键错误。 如果批处理中有一个重复的文档,它会立即抛出错误并返回,即使我需要它继续执行。 我知道为什么我们会得到这些,因为我正忙于将数据从非分区集合移动到分区集合,并且很有可能它们已经被迁移。

显然,在插入过程中,您可以isOrdered = false within the insertmanyoptions()传递isOrdered = false within the insertmanyoptions() ,它应该这样做,但它没有。

最终放弃后,我尝试通过BulkWriteAsync尝试此BulkWriteAsync同时使用IsUpsert = true可悲的是,我遇到了一个有趣的错误:

值不能为空。 参数名称:请求

下面是我的代码。

    public async Task BulkInsertDeviceConfigData(List<DeviceEventConfigure> Elements)
    {
        var models = new List<WriteModel<BsonDocument>>();

        // use ReplaceOneModel with property IsUpsert set to true to upsert whole documents
        foreach (var element in Elements)
        {
            var bsonDoc = element.ToBsonDocument();
            models.Add(new ReplaceOneModel<BsonDocument>(new BsonDocument("_id", element.Id), bsonDoc) { IsUpsert = true });
        };

        await BulkWriteAsync(models as IEnumerable<WriteModel<DeviceEventData>>);
    }

    public virtual async Task BulkWriteAsync(IEnumerable<WriteModel<T>> models)
    {
        await Collection.BulkWriteAsync(models);
    }

在此处输入图片说明

这一直在伤害我,因为我们最近一直在增加我们的 RU 来做到这一点,尽管遗憾的是没有成功。

这是 Azure Mongo API 问题还是我的问题?

也许你的演员

models as IEnumerable<WriteModel<DeviceEventData>> 

不工作导致参数请求的空值。 我不认为强制转换为 BsonDocument 是必要的,所以它可以写成:

public async Task BulkInsertDeviceConfigData(List<DeviceEventConfigure> Elements)
{
    var models = new List<WriteModel<DeviceEventConfigure>>();

    // use ReplaceOneModel with property IsUpsert set to true to upsert whole documents
    foreach (var element in Elements)
    {
        models.Add(new ReplaceOneModel<DeviceEventConfigure>(new BsonDocument("_id", element.Id), element) { IsUpsert = true });
    };

    await BulkWriteAsync(models as IEnumerable<WriteModel<DeviceEventConfigure>>);
}

public virtual async Task BulkWriteAsync(IEnumerable<WriteModel<T>> models)
{
    await Collection.BulkWriteAsync(models);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM