NodeJS DynamoDb get item键上的条件数无效

rxztt3cl  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(178)

我一直在试图找到一个解释这种情况,但我没有找到任何。我有两个DynamoDb表,都有两个键索引,一个是HASH键,另一个是RANGE键。
在两个键都是字符串的表中,我可以只使用HASH键查询数据库,如下所示(使用node sdk):

const params = {
    TableName: process.env.DYNAMODB_TABLE,
    Key: { id: sessionId },
  };
  const { Item } = await dynamoDb.get(params);

但是,在另一个表上执行相同的操作会抛出上述关于The number of conditions on the keys is invalid的错误
下面是两个表模式:
这个表定义允许我使用上面提到的查询。

SessionsDynamoDbTable:
    Type: 'AWS::DynamoDB::Table'
    DeletionPolicy: Retain
    Properties:
      AttributeDefinitions:
        -
          AttributeName: userId
          AttributeType: S
        -
          AttributeName: id
          AttributeType: S
        -
          AttributeName: startDate
          AttributeType: S
      KeySchema:
        -
          AttributeName: userId
          KeyType: HASH
        -
          AttributeName: id
          KeyType: RANGE
      LocalSecondaryIndexes:
        - IndexName: byDate
          KeySchema:
          - AttributeName: userId
            KeyType: HASH
          - AttributeName: startDate
            KeyType: RANGE
          Projection:
            NonKeyAttributes:
            - endDate
            - name
            ProjectionType: INCLUDE
      BillingMode: PAY_PER_REQUEST
      TableName: ${self:provider.environment.DYNAMODB_TABLE}

这不允许我进行像上面提到的那样的查询

SessionsTable:
    Type: 'AWS::DynamoDB::Table'
    TimeToLiveDescription:
      AttributeName: expiresAt
      Enabled: true
    Properties:
      AttributeDefinitions:
        -
          AttributeName: id
          AttributeType: S
        -
          AttributeName: expiresAt
          AttributeType: N
      KeySchema:
        -
          AttributeName: id
          KeyType: HASH
        -
          AttributeName: expiresAt
          KeyType: RANGE
      BillingMode: PAY_PER_REQUEST
      TableName: ${self:provider.environment.DYNAMODB_TABLE}

我包括了整个表定义,因为我不知道辅助索引是否会对这个问题产生影响。

bf1o4zei

bf1o4zei1#

必须提供分区键属性的名称和该属性的单个值。查询返回具有该分区键值的所有项。或者,您可以提供排序键属性并使用比较运算符来细化搜索结果。more

get(params,callback)⇒ AWS.Request

通过委托给AWS.DynamoDB.getItem(),返回具有给定主键的项的一组属性。
在SessionsTable中,id是HASH键,在SessionsDynamoDbTable中,id是RANGE键。对于SessionsDynamoDbTable,除了RANGE键外,还应提供HASH键。

相关问题