在dynamodb中的"IN"语句

Had*_*ier 10 amazon-web-services nosql amazon-dynamodb aws-sdk

我有一个"用户"表,这里有一个示例:

{
    username:"haddox",
    formattedPhoneNumber:"676767676",
    verified: 0,
}
Run Code Online (Sandbox Code Playgroud)

我的愿望是检索formatPhoneNumber包含在电话号码数组中的所有用户(从我的联系人中检索).我创建了一个二级索引,验证为HASH,formattedPhoneNumber为RANGE.这是我的尝试:

var params = {
    TableName: "Users",
    IndexName: "FormattedPhoneSecondaryIndex",
    KeyConditionExpression: "verified  = :v AND formattedPhone IN :n",
    ExpressionAttributeValues: {
        ":v":1,
        ":n": ["672053916", "642117296"]
    },
    ProjectionExpression: "username, formattedPhoneNumber"
};



dynamodb.query(params, function(err, data) {
    if (err)
        console.log(JSON.stringify(err, null, 2));
    else
        console.log(JSON.stringify(data, null, 2));
});
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误: Invalid KeyConditionExpression: Syntax error; token: \":n\", near: \"IN :n\"",

IN关键字有问题吗?也许有另一种方法来实现这一目标?

小智 12

KeyConditionExpression不能使用"IN"运算符(请参阅http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#FilteringResults).在查询操作中使用KeyConditions/KeyConditionExpression的想法是更有效地从DynamoDB读取项目页面,因为具有相同散列键但不同范围键的项目是连续且按排序顺序存储的.IN运算符需要提取某些页面的一小部分,这会使查询操作效率降低,因此KeyConditions不允许这样做.您可能希望将其添加为FilterExpression,这是一个便捷参数,用于减少从DynamoDB返回的项目数,但不会影响从DynamoDB读取数据的方式.

  • `scanExpression.filterExpression = @"Id IN(:val)"; scanExpression.expressionAttributeValues = @ {@":val":[idList componentsJoinedByString:@","]};`那是怎么用的?我尝试过放置数组但没有成功,这就是加入数组的原因 (3认同)