如何在没有分区键的情况下在 DynamoDb table 中查找值?

How to find value in DynamoDb table without partition key?

我试图通过字段值在 DynamoDb table 中查找值,没有分区键,这就是我尝试实现此目的的方式:

const tag = await database.query({
      TableName: 'blog_tags',
      KeyConditionExpression: 'tagName = :name',
      ExpressionAttributeValues: {
        ':name': {S: 'test'}
   }
});

但我收到错误 ValidationException: Query condition missed key schema element: tagId

在我的 table 中,我将 tagId 作为分区键,将 tagName 作为值字段。但我只想按 tagName 搜索。

我该如何修改这个查询?

DynamoDB 为我们提供了两种获取数据的方式:queryscan.

query操作要求您指定主键。 scan 操作允许您通过指定 any 属性来获取项目。

因此,如果您想在不使用主键的情况下从 DynamoDB 获取数据,您可以使用 scan operation。但是,使用 scan 时要小心。来自文档:

The Scan operation returns one or more items and item attributes by accessing every item in a table or a secondary index.

如果不小心使用,scan 操作可能会非常低效。如果此访问模式在您的应用程序中很常见,您可能需要重新组织数据,使 tagName 成为主键的一部分。这将允许您使用 query 操作来获取您需要的数据。