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);