gpt4 book ai didi

amazon-web-services - AWS DynamoDB 查询数组中的值

转载 作者:行者123 更新时间:2023-12-05 01:58:36 24 4
gpt4 key购买 nike

具有以下(TableName:“表”):

[
{
name: "name1",
values: ["string1", "string2"]
},
{
name: "name2",
values: ["string1", "string2", "string3"]
}
]

我的分区键是 name,没有任何排序键。我正在尝试查询具有相同 value 字段的所有项目。以下是我尝试过的:


docClient.query({
TableName: "Table",
KeyConditionExpression: "name = :name",
FilterExpression: "contains(values, :value)",
ExpressionAttributeValues: {
":name": "certain_name",
":value": "string1",
},
});

假设我想查询value字段为“string1”的所有项目。但是,AWS DynamoDB 需要分区键,它对我的​​所有项目都是唯一的。有没有什么方法可以查询具有相同 value 字段的所有项目,而无需担心 partition key

或者更好的方法是从 DynamoDB 中获取所有项目,然后使用我自己的方法进行查询?

谢谢大家!

最佳答案

对于该查询模式,您可能应该重新考虑您的数据模型,我建议如下:

<表类="s-表"><头>PKSKGSI1PKGSI1SK<正文>名字#name1VALUE#val1VALUE#val1名字#name1名字#name1VALUE#val2VALUE#val2名字#name1名字#name1VALUE#val3VALUE#val3名字#name1名字#名字2VALUE#val1VALUE#val1名字#名字2

PK 和 SK 是基表的分区和排序键,有一个全局二级索引“GSI1”,以 GSI1PK 为分区,GSI1SK 为排序键。

按名称获取所有值 会像这样:

Query(KeyConditionExpression: PK = "NAME#<name>")

这将返回所有值的列表。

按值获取所有名称可以像这样完成:

Query(KeyConditionExpression: GSI1PK = "VALUE#<value>", Index: GSI1)

这将返回所有名称的列表。

这种模式称为倒排索引,原则上您也可以定义分区键为 SK、排序键为 PK 的全局二级索引,以避免属性重复。

NAME#VALUE# 前缀也可以省略,但如果您使用单表设计,这是一个很好的做法。

关于amazon-web-services - AWS DynamoDB 查询数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68481321/

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