node.js,在Azure Cosmos DB中批量删除数据

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);
posted @   弦月沉西  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示