You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDB如何使用query()替代scan()执行contains()过滤查询

DynamoDB使用query实现contains过滤的实现方案

核心结论

可以使用query替代scan实现groups_name字段的contains过滤逻辑,你的表所有条目分区键均为fund的设计完全满足query操作的前置要求。

注意:contains仅支持在FilterExpression中使用,无法作为键查询条件,过滤逻辑会在DynamoDB读取完指定分区的所有数据后执行,不会降低该分区内已扫描数据的读容量消耗。

可直接运行的实现代码

import boto3
from boto3.dynamodb.conditions import Key, Attr

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('investors')

data = table.query(
    # 请将下方<你的分区键字段名>替换为表实际的分区键字段名称
    KeyConditionExpression=Key('<你的分区键字段名>').eq('fund'),
    FilterExpression=Attr('groups_name').contains('person_name')
)

额外注意事项

  • 如果你原表除了fund分区外还有其他分区,该写法的成本远低于全表scan,因为只会扫描fund这一个分区内的数据。
  • 如果fund分区下数据量极大,想要进一步降低读取成本,建议调整表结构:新增全局二级索引(GSI),将groups_name列表中的每个人名单独作为索引的分区键存储,即可直接通过键条件查询匹配的条目,不需要后过滤,大幅降低容量消耗。
  • 该写法的contains对列表类型字段的匹配逻辑和你之前scan的逻辑完全一致,会正确识别列表中是否存在目标字符串元素。

内容的提问来源于stack exchange,提问作者Shubham K.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 03:36:05