当前位置: 首页 > 知识库问答 >
问题:

不带排序键的DynamoDB查询

鲁文昌
2023-03-14

我有一个DynamoDB表,其中包含主键:userID、排序键:sesionID和另一列,该列名为示例ID。

我想返回一个列表,该列表返回所有包含我发送的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”}”,

...

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

非常感谢您的帮助。非常感谢。

共有1个答案

楮景明
2023-03-14

我刚刚添加了一个新的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

    }
  };

这似乎现在起作用了。

 类似资料:
  • 我正在为DynamoDb使用AWS(JS)文档客户端库,并试图从表(分区排序键)中执行。问题是,我想按分区键和任何排序键获取所有项。 如果我没有在中定义sort key,我会得到

  • 我正在使用AWS dynamodb存储一些数据。此表将“key”作为“主分区键”,将“create_micro_time_float”作为“主排序键”。 我在表中的数据类似于这样。

  • 我试图从AWS Lambda函数更新DynamoDb表中的一项,但出现以下错误: “errorMessage”:“调用UpdateItem操作时发生错误(ValidationException):提供的键元素与架构不匹配”, 在定义我的表时,我没有定义排序键,我的分区键名为'pipeId',我使用了以下代码: 在没有预先设置排序键的情况下,无法获取或更新项?还是我做错了什么?

  • 我一直在阅读关于使用GSI的最佳方式的问题,这一个DynamoDB:在查询中使用全球二级索引接近我所需要的,但我仍然有几个问题。 我需要进行以下三类查询: 根据我的理解,创建一个基于product_name的GSI将服务于所有三个目的。我想了解的是,在排序键中再添加2个带有launch_year和manufacture的GSI会加快查询2和3的速度吗?sort key的唯一目的是返回已排序的数据,

  • 我有一个带有分区键(UUID)的DynamoDB表,其中有几个属性(如名称、电子邮件、创建日期等)。创建日期是项目中的一个属性,其格式为YYYY-MM-DD。但现在有一个要求更改-我必须根据创建日期对其进行排序,并提供整个数据(也就是说,我不能只将数据放在某个特定分区上,而是以排序方式将所有分区中的所有数据都放在一起。我知道这可能需要DynamoDB花费时间从所有分区中提取数据并在之后进行排序。我

  • 您好,我是DynamoDB新手,我创建了一个表,其中包含分区键“pk”和排序键“id” 在then item explorer中,我可以用pk进行查询并对键值进行排序,这似乎很有效。 在PartiQL编辑器中我做 我得到的错误过滤器表达式只能包含非主键属性:主键属性:id 我不知道如何在键条件中指定排序键,而不是使用WHERE子句指定筛选条件。