SQL 的键或属性 'not in("value1", "value2"...)' 的 DynamoDB 等价物

DynamoDB equivalent of SQL's key or attribute 'not in("value1", "value2"...)'

我正在尝试使用来自 aws-sdk 模块的 AWS.DynamoDB.DocumentClient 运行 一些 dynamoDB 操作,但我无法找到一个简单的解决方案来解决 select 属性不等于的项目到一组值。

例如 属性 <> ["value1", "value2]

这等同于一个简单的典型 SQL 形式的操作:

select * from sometable where attribute not in("value1", "value2"...);

按照文档 here 尝试不同的 ScanFilter 和 QueryFilter 后,NE 和 NOT_CONTAINS 的 AttributeValueList 似乎不接受多个值。

我希望得到如下所示的结果,而不必定义多个 'AND' 查询

我后来找到了这个解决方案,但它看起来很笨拙,我必须编写逻辑来创建过滤条件字符串和 ExpressionAttributeValues,因为过滤条件是动态的。

FilterExpression: 'answer <> :answer1 AND answer <> :answer2',
        ExpressionAttributeValues : {
            ':answer1' : "test1",
            ':answer2' : "test2"
        }

因此我有 2 个问题:

  1. 有更好的方法吗?
  2. KeyConditionExpression的字符串有长度限制吗?我 我很确定有,但我似乎无法找到信息 关于这个。
  1. 没有其他方法可以实现您的需求。如果所有这些值都有一些共同点,并且您在写入时就知道了,则可以使用某种前缀插入它们并创建 GSI,它们将在其中作为排序键。在这种情况下,您将能够通过关键条件表达式中的前缀来查询它们。否则,您的建议是您唯一的选择。
  2. 所有表达式的总和为 4KB。如 Expression Parameters:
  3. 中所述

Expression parameters include ProjectionExpression, ConditionExpression, UpdateExpression, and FilterExpression.

The maximum length of any expression string is 4 KB. For example, the size of the ConditionExpression a=b is 3 bytes.