我已经尝试从 DynamoDB 查询数据 2 天了。让我发疯。
我的办公室里有一张 table 。假设有两个办事处:科克和都柏林。我有一个名为“deskName”的列,其名称为“cork1”、“cork2”、“dub1”、“dub2”。我希望能够在表中查询包含“cork”或“dub”的项目,因为它们位于同一个表中,但我不想扫描整个表。
代码:
const params = {
TableName: process.env.DYNAMODB_DESKS_TABLE,
//KeyConditionExpression: '#deskName = :deskName',
KeyConditionExpression: "begins_with(#deskName, :deskName)",
ExpressionAttributeNames: {
"#deskName": "deskName"
},
ExpressionAttributeValues: {
":deskName": "cork"
}
}
dynamodb.query(params, (error, result) => {
if (error) {
console.error(error);
callback(null, {
statusCode: error.statusCode || 501,
headers: {'Content-Type': 'text/plain'},
body: 'Couldn\'t get desks'
});
return;
}
const response = {
statusCode: 200,
body: JSON.stringify(result.Item)
};
callback(null, response);
});
YAML:
HotDeskDesksDBTable:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
AttributeDefinitions:
-
AttributeName: deskName
AttributeType: S
KeySchema:
-
AttributeName: deskName
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: ${self:provider.environment.DYNAMODB_DESKS_TABLE}
错误:
ValidationException: Query key condition not supported
当我遇到条件=“cork-1”时,我设法拿回了一件元素。我想要获得以“软木塞”开头的所有元素。
谢谢
最佳答案
你明白了...
Syntax error in module 'api/desks/get': SyntaxError
KeyConditionExpression: "#deskName = :deskName",
^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Unexpected identifier
因为这个...
const params = {
TableName: process.env.DYNAMODB_DESKS_TABLE,
IndexName: 'deskName'
KeyConditionExpression: "#deskName = :deskName",
ExpressionAttributeNames:{
"#deskName": "deskName"
},
ExpressionAttributeValues: {
":deskName": "cork"
}
}
JavaScript 对象在每个属性后需要一个逗号。您在 IndexName: 'deskName'
之后缺少一个。
我建议使用DocumentClient因为它可以轻松地将 Javascript 数据类型映射到 DynamoDB 数据类型。
关于node.js - 无法使用 Begins_with 查询 DynamoDB 的项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46543319/