DynamoDB检查数组是否存在空值的FilterExpression查询无结果问题
问题原因分析
你的查询没有返回结果,核心是对DynamoDB的contains函数规则和存储结构的匹配逻辑理解有误,具体问题分场景说明:
- 场景1:你要查询的
columnName是字符串类型,值为空串
DynamoDB的contains函数针对字符串类型做判断时,仅支持匹配非空的子串,空串不会被认为是任何字符串的子串,所以contains(columnName, "")永远返回false,自然查不到结果。
这种场景下你不需要用contains,直接用相等判断即可:FilterExpression : `columnName = :data` ExpressionAttributeValues:{ ":data": "" } - 场景2:你要查询的
columnName是List类型,存储结构为[{"S": ""}]
此时List中的元素是Map结构,而你表达式里传入的匹配值是字符串类型的空串,类型不匹配自然无法命中。你需要传入和List元素结构完全一致的Map作为匹配值:
注:如果是要判断List中某个指定位置的元素的S属性为空,也可以直接写路径匹配:FilterExpression : `contains (columnName, :data)` ExpressionAttributeValues:{ ":data": {"S": ""} }columnName[0].S = :data
内容的提问来源于stack exchange,提问作者Arun Hossamani
相关产品推荐
相关产品推荐

