Aws lambda 使用包含sortkey上的条件的键条件表达式(AWS DynamoDB with Serverless Framework)

Aws lambda 使用包含sortkey上的条件的键条件表达式(AWS DynamoDB with Serverless Framework),aws-lambda,amazon-dynamodb,serverless-framework,dynamodb-queries,Aws Lambda,Amazon Dynamodb,Serverless Framework,Dynamodb Queries,我只想从一个DynamoDB表(“todosTable”)中检索一项,partitionKey=userID,sortKey=todoID 为了向您展示一些东西,下面有一个示例可以正确地获取userId=userId的用户的所有todo项 async getAllTodos(userId: string): Promise<TodoItem[]>{ const result = await this.docClient.query({ TableName: t

我只想从一个DynamoDB表(“todosTable”)中检索一项,partitionKey=userID,sortKey=todoID

为了向您展示一些东西,下面有一个示例可以正确地获取userId=userId的用户的所有todo项

 async getAllTodos(userId: string): Promise<TodoItem[]>{

    const result = await this.docClient.query({
      TableName: this.todosTable,
      KeyConditionExpression: 'userId = :userId',
      ExpressionAttributeValues: {
        ':userId': userId
      }
    }).promise()
    return result.Items as TodoItem[]
  }
异步getAllTodos(userId:string):承诺{ const result=等待this.docClient.query({ TableName:this.todosTable, KeyConditionExpression:'userId=:userId', 表达式属性值:{ “:userId”:userId } }).承诺 返回结果。项作为TodoItem[] } 但这不是我想要的。我只想要一件。 根据文档,我将使用作用于主键(分区和/或排序键)的键条件表达式

所以我试着这样做,但这是不正确的

异步getTodoItem1(userId:string,todoId:string):承诺{ const result=等待this.docClient.get({ TableName:this.todosTable, KeyConditionExpression:'userId=:userId', 和todId=:todoId, 表达式属性值:{ “:userId”:userId, “:todoId”:todoId } }).承诺 返回结果。项 } 有人能帮我得到只检索一项的正确查询吗,其中partition key=userID,sort key=todoID

在这种情况下,使用GlobalSecondaryIndex的模式是否正确


谢谢

您还需要将副键添加到
KeyConditionExpression
中,应该如下所示:

KeyConditionExpression: 'userId = :userId AND todoId = :todoId'

排序键更灵活,并允许其他操作,如
开头、
之间等

您还需要将辅助键添加到
KeyConditionExpression
中,如下所示:

KeyConditionExpression: 'userId = :userId AND todoId = :todoId'

排序键更灵活,并允许其他操作,如
开头,
介于
etc

之间,请注意,如果您的
KeyConditionExpression
结果正好是这样的-指定特定的分区键和排序键-那么您也可以使用更简单的
GetItem
请求,而不是
查询
,这是对单个特定项的请求。请注意,如果您的
KeyConditionExpression
最终恰好是这样-指定特定的分区键和排序键-那么您也可以使用更简单的
GetItem
请求,而不是
Query
,后者是对单个特定项的请求。