如何在没有分区键的情况下在 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 为我们提供了两种获取数据的方式:query
和 scan
.
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
操作来获取您需要的数据。
我试图通过字段值在 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 为我们提供了两种获取数据的方式:query
和 scan
.
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
操作来获取您需要的数据。