这是 dynamodb 表上的项目格式
{
"id":"partition_key_id",
"Products": {
"ProductGroupA": [
{
"Description": "2",
}
],
"ProductGroupC": [
{
"Description": "3",
}
]
}
}
仅当嵌套键“Products.ProductGroupA”存在时,我才尝试查询该项目:
import boto3
dynamodb = boto3.client('dynamodb')
index_name = 'Products-index'
response = dynamodb.query(
TableName='my_table',
IndexName=index_name,
FilterExpression='attribute_exists(#Products.#a)',
ExpressionAttributeNames={
'#Products': 'Products',
'#a': 'ProductGroupA'
},
)
但是,我总是收到错误。使用boto3的“查询”方法可以实现这个目标吗?我想避免使用“扫描”方法,因为会消耗 RCU
如果无法查询,有什么建议吗?或者我应该调整dynamodb表的结构格式。我尝试嵌套格式的原因是易于管理,但读取效率使得实现起来非常困难。
非常感谢。 祝你有美好的一天!
创建此索引时,您将指定分区键或/和排序键。这些是您的索引搜索所必需的字段。然后,您需要在查询中添加
KeyConditionExpression
,然后才能给它 FilterExpression
response = dynamodb.query(
IndexName='Products-Index',
KeyConditionExpression='id = :id',
FilterExpression='attribute_exists(Products.ProductGroupA)',
ExpressionAttributeValues={
':id': 'partition_key_id',
}
)
此方法将使用您的索引来检索具有
partition_key_id
的对象,然后仅扫描该查询的结果。
如果此方法不够,您将需要根据您正在使用的访问模式重新考虑您的数据模型。
希望这会有所帮助:)如果您可以提供有关数据的更多上下文以及您想要如何检索它,我们很乐意与您一起构建格式。