如何通过DynamoDB.Client.Scan()检索指定属性不为空的所有记录?
解决DynamoDB Scan检索指定属性非空记录的问题
我之前也踩过这个坑!DynamoDB对空值/不存在属性的处理逻辑和传统关系型数据库不一样,你原来用Fiction != :fiction加nil值的写法是不会生效的——因为当属性不存在或者为null时,这个比较表达式不会匹配到任何结果。
正确的做法是使用DynamoDB内置的attribute_exists()函数,它专门用来判断某个属性是否存在且不为空。下面是修正后的代码:
res = db.scan({ table_name: "Records", filter_expression: "attribute_exists(Fiction)" # 这里不需要expression_attribute_values了,因为函数不需要占位符 })
补充说明:
attribute_exists(Fiction)会匹配所有**存在Fiction属性且属性值不为null**的条目- 如果你的需求是排除属性值为特定空值(比如空字符串)的情况,可以结合条件:
attribute_exists(Fiction) AND Fiction != :empty_str,然后在expression_attribute_values里设置:empty_str => "" - 注意Scan操作会遍历整个表,数据量大时性能会受影响,如果这个查询是高频操作,建议考虑给
Fiction属性创建全局二级索引(GSI)来优化查询效率
内容的提问来源于stack exchange,提问作者RoboJ1M
相关产品推荐
相关产品推荐

