查询条件缺少关键架构元素:验证错误

新手上路,请多包涵

我正在尝试使用以下代码查询 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);
});

当我运行它时,我收到一条错误消息:

 ValidationException: Query condition missed key schema element: id

我不明白。我已将 id 定义为 jobs 表的分区键,需要找到所有处于 processing 状态的作业。

原文由 Suhail Gupta 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 769
2 个回答

在另一个回答 中@smcstewart 回答了这个问题。但他提供了一个链接,而不是评论为什么会出现这个错误。我想添加一个简短的评论,希望它能节省您的时间。

关于查询表的 AWS 文档 指出您可以以 DynamoDB 方式执行 WHERE 条件查询(例如 SQL query SELECT * FROM Music WHERE Artist='No One You Know' ),但有一个重要警告:

您必须为 PARTITION 键指定一个 EQUALITY 条件,并且您可以选择为 SORT 键提供另一个条件。

这意味着 您只能将关键属性与 Query 一起使用。以任何其他方式执行此操作将意味着 DynamoDB 将为您运行 全面扫描,这 效率不高- 效率低于使用全局二级索引。

因此,如果您需要查询非键属性,使用 Query 通常不是一个选项 - 最好的选择是使用 @smcstewart 建议的 全局二级索引

我发现 本指南 对于手动创建全局二级索引很有用。

如果您需要使用 CloudFormation 添加它, 这里是一个相关页面

原文由 Ula 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题