You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDB如何通过deleted软删除字段扫描未被删除的全部记录

问题原因

你之前的查询不生效有两个核心原因:

  • DynamoDB 条件判断中,只有属性真实存在于记录上时,等值/不等值判断才会生效,你未删除的记录没有deleted字段,不会触发任何等值匹配逻辑
  • 第二种写法将比较值设为空字符串,deleted是boolean类型,不同数据类型的值在DynamoDB中判断时永远不相等,所以也不会返回结果
正确实现方案

基础实现(适配你当前的字段规则)

你的场景下仅删除的记录会存在deleted = true的属性,未删除记录无该字段,直接用attribute_not_exists函数判断字段不存在即可:

var scanParams = {
  TableName: "students",
  FilterExpression: "attribute_not_exists(deleted)",
};

const scan = await db.scan(scanParams).promise();

兼容场景实现

如果后续可能存在部分记录存储了deleted = false的属性,需要同时兼容这部分未删除记录,可以扩展过滤表达式:

var scanParams = {
  TableName: "students",
  FilterExpression: "attribute_not_exists(deleted) OR deleted = :deleted",
  ExpressionAttributeValues: {
    ":deleted": false,
  },
};

const scan = await db.scan(scanParams).promise();

内容的提问来源于stack exchange,提问作者handsome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:24:01