[英]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.