1

JavaScript SDK

我正在尝试在查询的 KeyConditions 中使用 ComparisonOperator "IN"

var params = {
            TableName: 'xxxxx',
            KeyConditions: {
                'uuid': {
                  ComparisonOperator: 'IN',  /* required */
                  AttributeValueList: [
                    "abc", "def", "ghi" 
                  ]
                }              }

        };
var dynamoQueryPromise = dynamoClient.query(params).promise();
...

但我收到错误:

ValidationException:尝试的条件约束不是可索引操作

操作“IN”不可用吗?

任何建议表示赞赏。

****更新*****

我遵循了来自重复问题链接的潜在建议

它建议在 FilterExpression 中使用“IN”操作而不是 KeyConditionExpression

我更新了我的代码:

使用 PK = 'staff' 创建索引 'my-index'

var keyExpr = "#staff = :staff";
var filterExpr = " #phone IN :phone"

var attributeNames = new Object();
attributeNames["#staff"] = 'staff';
attributeNames["#phone"] = 'phone';

var attributeValues = new Object();
attributeValues[":staff"] = 'A1';
attributeValues[":phone"] = ['0012341', '12342134', '214234124'];
var params = {
      TableName: 'xxxxxx',
      IndexName: 'my-index',
      KeyConditionExpression: keyExpr,
      FilterExpression: filterExpr,
      ExpressionAttributeNames: attributeNames,
      ExpressionAttributeValues: attributeValues
}
...

结果:错误

ValidationException:无效的FilterExpression:语法错误;令牌:“:电话”,附近:“IN:电话”

4

1 回答 1

0

根据发布的信息,无法确定“电话”是否是您的排序键。但是,索引键不支持 DynamoDB 查询运算符 IN。

对于非索引键,请确保您的 AttributeNames 列表和 AttributeValues 已正确声明。

在此处添加链接供您参考:Dynamo DB filter expression using IN operator with numeric array variable

于 2020-06-02T19:28:15.783 回答