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