Suh*_*pta 23 amazon-web-services nosql node.js amazon-dynamodb
我试图dynamodb使用以下代码进行查询:
const AWS = require('aws-sdk');
let dynamo = new AWS.DynamoDB.DocumentClient({
service: new AWS.DynamoDB(
{
apiVersion: "2012-08-10",
region: "us-east-1"
}),
convertEmptyValues: true
});
dynamo.query({
TableName: "Jobs",
KeyConditionExpression: 'sstatus = :st',
ExpressionAttributeValues: {
':st': 'processing'
}
}, (err, resp) => {
console.log(err, resp);
});
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我收到一个错误说:
ValidationException: Query condition missed key schema element: id
Run Code Online (Sandbox Code Playgroud)
我不明白.我已将其定义id为jobs表的分区键,需要查找processing状态为的所有作业.
smc*_*art 31
您正在尝试使用不包含主键的条件运行查询.这就是查询在DynamoDB中的工作方式.您需要对您的案例中的信息进行扫描,但是,我认为这不是最佳选择.
我想你想设置一个全局二级索引并使用它来查询processing状态.
@smcstewart在另一个答案中回答了这个问题。但是他提供了一个链接,而不是评论为什么会发生此错误。我想添加一个简短的评论,希望可以节省您的时间。
有关查询表的AWS文档指出,您可以以DynamoDB的方式进行WHERE条件查询(例如SQL query SELECT * FROM Music WHERE Artist='No One You Know'),但有一个重要警告:
您必须为PARTITION键指定一个EQUALITY条件,并且可以选择为SORT键提供另一个条件。
表示您只能将关键属性与一起使用Query。以任何其他方式执行此操作将意味着DynamoDB将为您运行完整扫描,但效率不高 -比使用全局二级索引效率低。
因此,如果您需要使用Query来查询非关键属性,通常不是一个选项-最佳选择是使用@smcstewart建议的全局二级索引。
我发现该指南对于手动创建全局二级索引很有用。
如果您需要使用CloudFormation添加它,则这里是一个相关页面。
| 归档时间: |
|
| 查看次数: |
28828 次 |
| 最近记录: |