node.js,在Azure Cosmos DB中批次刪除資料

弦月沉西發表於2024-06-04

1.刪除資料操作:

對於資料,不做邏輯刪除,僅作標記刪除,即將資料的isDelete屬性置為true,因此刪除資料實際上是修改資料。

某個item如圖

const item = await container.item(id, partitionKey).read() // 根據id和partitionKey讀取資料
let Item = item.resource //獲取資料所有屬性
Item.isDelete = "true" // 將isDelete欄位設定為true,標記刪除
const { resource: replacedItem } = await container.item(id).replace(Item) //更新原資料

2.批次操作

  • V3版本及更新的SDK:

使用Container.items.bulk()方法進行批次操作

const { resources: items } = await container.items.query(querySpec).fetchAll(); // 根據條件查詢所有符合的資料
const operations = items.map(item => {
    return {
        operationType: 'Replace',
        partitionKey: item.partitionKey,
        resourceBody: {
            id: item.id,
            ...item, // 保持原有屬性不變或新增或修改你想要的屬性
            isDelete: "true" //標記刪除
        }
    };
});

// 執行批次操作
const { result } = await container.items.bulk(operations)
  • V3之前較舊版本的SDK:

舊版本中不存在Container.items.bulk()方法,獲取到所有items後,需要對這些items分別進行修改。可以使用迴圈,但如果資料量較大,迴圈耗時太多,所以選擇使用promise.all()方法併發操作。

const { resources: items } = await container.items.query(querySpec).fetchAll(); // 根據條件查詢所有符合的資料
const promises = items.map(async (item) => {
    item.isDelte = "true"; // 標記刪除
    return container.item(item.id).replace(item);
});
// 使用Promise.all併發執行所有的替換操作
await Promise.all(promises);

相關文章