没有排序键的DynamoDB查询

时间:2020-09-07 14:42:02

标签: javascript amazon-web-services amazon-dynamodb dynamodb-queries

我有一个DynamoDB表,其中包含主键:userID,排序键:sessionID和另一列,名为examID。

我想返回一个列表,该列表返回具有我发送的userID和examID的所有记录。 这是我的代码:

export const main = handler(async (event, context) => {

  const data = JSON.parse(event.body);
  const params = {
    TableName: process.env.tableNameExamResults,
    KeyConditionExpression: "userId = :userId and examId = :examId",
    ExpressionAttributeValues: {
      ":userId": event.requestContext.identity.cognitoIdentityId,
      ":examId": data.examId

    }
  };

  const result = await dynamoDb.query(params);

  
  return result.Items;
});


这是我得到的错误: { “ statusCode”:500, “ body”:“ {” error“:”查询条件缺少关键架构元素:sessionId“}”,

...

我认为也许我应该包括一个过滤器表达式,或者不确定是否必须使用索引重新创建数据库。

感谢您的帮助。谢谢

1 个答案:

答案 0 :(得分:1)

我刚刚添加了一个新的GSI,然后我也编辑了我的代码:

const params = {
    TableName: process.env.tableNameExamResults,
    IndexName: 'userId-examId-index', 
    KeyConditionExpression: "userId = :userId and examId = :examId",
    ExpressionAttributeValues: {
      ":userId": event.requestContext.identity.cognitoIdentityId,
      ":examId": data.examId

    }
  };

这似乎现在可行。