tbe*_*en1 0 amazon-dynamodb aws-sdk
我正在使用AWS DynamoDB DocumentClient查询我的DynamoDB表。在我的表中,我有一个名为“ _id”的属性,该属性为每个条目保留唯一的ID。当我尝试基于此ID查询记录时,最终收到一条错误消息:“无效的KeyConditionExpression:语法错误;令牌:\“ _ \”,附近:\“ _ id \”“。进行此查询的代码如下。
function findById(id) {
//Build query
var params = {};
params.TableName = "recordDev";
params.IndexName = "_id";
params.KeyConditionExpression = '_id = :id';
params.ExpressionAttributeValues = {
':id': id
};
return DynamoDB
.query(params).promise()
.then(function(records) {
return records.Items[0];
})
.catch(function(error) {
return Promise.reject(error);
});
};
Run Code Online (Sandbox Code Playgroud)
在为DynamoDB构建查询参数时,是否缺少有关使用“ _”的内容?我曾尝试查找类似的错误,但是无法找到与我的情况类似的任何错误。
您可以尝试使用ExpressionAttributeNames参数吗?
var params = {};
params.TableName = "recordDev";
params.IndexName = "_id";
params.KeyConditionExpression = '#id = :id';
params.ExpressionAttributeValues = {
':id': id
};
params.ExpressionAttributeNames: {
"#id":"_id"
};
Run Code Online (Sandbox Code Playgroud)
当属性名称中有“-”时也会出现同样的问题。例如,我将“id-test”作为属性名称。我得到了同样的错误:
调用查询操作时发生错误(ValidationException):Invalid KeyConditionExpression: Syntax error; 令牌:“-”,附近:“teamid-testid”
@gkatzioura 建议的解决方案也适用于这种情况。这是我使用 Python boto3 约定的实现:
params = {}
params['TableName'] = "myTable"
params['ProjectionExpression']="idStatus"
params['KeyConditionExpression'] = 'scanid = :val1 and #idtest = :val2'
params['ExpressionAttributeValues'] = {":val1":{"S": scanid}, ":val2": {"S": id_test}}
params['ExpressionAttributeNames'] = {"#idtestid": "id-test"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3375 次 |
| 最近记录: |