簡體   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