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
相关产品推荐
相关产品推荐

