【问题标题】:How to use begins_with in AWS DynamoDb js sdk?如何在 AWS DynamoDb js sdk 中使用 begin_with?
【发布时间】:2019-12-05 18:51:56
【问题描述】:

我有一个用例将 begins_with 应用于 AWS Dynamodb 表的主排序键,
我可以使用 AWS 控制台中的 begin_with 键条件查询表,
我希望使用 AWS Javascript SDK 实现同样的目的。

我的表中有以下字段 -
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,how to query with BEGINS_WITH

Can't Query DynamoDB with Begins_with for list of Items

【问题讨论】:

  • 你在哪里得到语法错误,你能把错误也发布吗?
  • @uday8486 添加了错误
  • user_id = :user_id and begins_with(user_relation, :user_relation)

标签: javascript node.js amazon-web-services amazon-dynamodb aws-sdk


【解决方案1】:

试试:

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"
  }
}

【讨论】:

  • getting (node:40537) UnhandledPromiseRejectionWarning: ValidationException: Invalid KeyConditionExpression: 语法错误;令牌:“begins_with”,附近:“#user_relation b egins_with :user_relation”
  • 更新了答案,测试了它。有用。 begin_with 是一个函数,类似begins_with(#user_relation, :user_relation)
  • 想知道为什么我们需要所有这些额外的属性。所有这些信息都放在KeyConditionExpress 中,我们不能把它们都放在那里吗? ExpressionAttributeNames 和 ExpressionAttributeValues 只是名称绒毛。这可能要简单得多:(
猜你喜欢
  • 2023-03-30
  • 2017-01-28
  • 2017-03-15
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 2020-01-03
  • 2015-10-31
  • 2017-05-20
相关资源
最近更新 更多