如何在AWS DynamoDb js sdk中使用begins_with?

16

我有一个使用案例,需要在 AWS DynamoDB 表的主排序键上应用 begins_with 条件,
我可以使用 AWS 控制台中的 begins_with 关键条件查询该表,
我希望能够通过 AWS Javascript SDK 实现相同的操作。

enter image description here enter image description here

我的表格中有以下字段 -
1. user_id (主分区键)
2. user_relation (主排序键)

我尝试了以下代码 -

let AWS = require('aws-sdk');
let util = require('util');

AWS.config.update({
    region: 'us-east-1'
});

let connection = new AWS.DynamoDB.DocumentClient();

let params = {
    TableName: 'user_details',
    KeyConditionExpression: 'user_id = :user_id and user_relation begins_with :user_relation',
    ExpressionAttributeValues: {
        ':user_id': "1234",
        ':user_relation': "followed-by"
    }
};

console.log('getQuery Params => ', params);
let dynamoDb = util.promisify(connection.query).bind(connection);
let results = await dynamoDb(params);
console.log('results => ', results);

我遇到了语法错误,在查询AWS DynamoDb表时如何正确使用begins_with

错误信息 -

(node:40474) UnhandledPromiseRejectionWarning: ValidationException: Invalid KeyConditionExpression: Syntax error; token: "begins_with", near: "user_relation BE
GINS_WITH :user_relation"

参考资料 -
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#query-property

如何在DynamoDB中使用BEGINS_WITH进行查询

无法使用BEGINS_WITH查询DynamoDB列表项


你在哪里遇到了语法错误?能否同时发布错误信息? - uday8486
@uday8486 添加了错误。 - Ani
4
user_id = :user_id and begins_with(user_relation, :user_relation) - hoangdv
1个回答

35

尝试:

const params = {
  TableName: 'user_details',
  KeyConditionExpression: '#user_id = :user_id and begins_with(#user_relation, :user_relation)',
  ExpressionAttributeNames:{
    "#user_id": "user_id",
    "#user_relation": 'user_relation'
  },
  ExpressionAttributeValues: {
    ":user_id": "1234",
    ":user_relation": "followed-by"
  }
}

(node:40537) UnhandledPromiseRejectionWarning: ValidationException: 无效的KeyConditionExpression:语法错误;标记:“begins_with”,附近:“#user_relation begins_with :user_relation” - Ani
2
更新了答案,并进行了测试。它可以工作。 begins_with是一个函数,像begins_with(#user_relation, :user_relation)这样调用。 - uday8486
想知道为什么我们需要所有这些额外的属性。所有这些信息都适合于KeyConditionExpress中,我们不能把它们全部放在那里吗? ExpressionAttributeNamesExpressionAttributeValues只是名称上的花瓶。这可以简单得多: ( - Costa Michailidis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接