gpt4 book ai didi

amazon-dynamodb - 使用 "contains"查询 DynamoDB 项目

转载 作者:行者123 更新时间:2023-12-04 07:15:04 24 4
gpt4 key购买 nike

假设我有一个 DynamoDB 表,例如

TableName: 'Items'
Key: {Hash: 'Id'}

每个项目都有一个名称并属于一个客户,所以我也有一个索引
{Hash: CustomerId, Range:Name}

假设我有这个数据:
Id    CustomerId    Name
1 18 Milk
2 42 Orange juice
3 42 Apple juice
4 42 Coffee
5 54 Tomato juice

现在,我想查询特定客户的所有项目并过滤部分名称的结果(本质上是搜索操作)。例如,给我所有属于客户 42 名称中包含“果汁”的物品(橙汁和苹果汁是预期结果)。

如果我查询 CustomerId = '42' AND contains(Name, 'juice')我会收到一条错误消息,说 KeyConditionExpression不支持 contains .我可以理解这个限制,因为 contains意味着必须扫描所有项目(在给定的哈希键内),但是,您可以使用 CustomerId = '42' 查询所有项目这也是该哈希中的完整扫描,所以我不确定我是否理解这个限制。诸如 begins_with 之类的东西正如预期的那样支持(这是有道理的,因为很容易从排序集中快速返回一个子集)。

无论如何,所以我有点诅咒并说我将只使用 FilterExpression 并与浪费的 RCU:s 一起生活,从而导致查询
KeyConditionExpression: CustomerId = '42'
FilterExpression: contains(Name, 'juice')

但是现在我收到一条错误消息,说我不允许在我的 FilterExpression 中包含主键属性(“改用 KeyConditionExpression!”)。

这让我有些进退两难。我不能用 contains 过滤在我的 KeyCondition我无法过滤 Name在我的 FilterExpression .我是否应该只在 CustomerId 上创建一个单独的索引才能实现我的用例,还是有其他方法可以解决这个问题......?

最佳答案

对于 DynamoDB,我认为最好的解决方案是以您以后打算阅读的形状存储数据。

如果您发现自己需要复杂的读取查询,您可能会陷入期望 DynamoDB 表现得像 RDBMS 的陷阱,而事实并非如此。在写入时转换和塑造您的数据,保持读取简单。

关于amazon-dynamodb - 使用 "contains"查询 DynamoDB 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48685245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com