AWS DynamoDB使用数组中的值进行查询



具有以下内容(表名:"表"(:

[
{
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",
},
});

假设我想查询CCD_ 3字段为"0"的所有项目;字符串1";。然而,AWS DynamoDB需要partition key,它对我的所有项目都是唯一的。有没有什么方法可以查询具有相同value字段的所有项目,而不必担心partition key

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

谢谢大家!

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

名称#名称1名称#名称1名称#名称2
PK GSI1PK GSI1SK
NAME#name1 VALUE#val1 NAME#name1
名称#name1 VALUE#val2
名称#name1 VALUE#val3
名称#name2 VALUE#val1

我通过使用aws-sdk中的.scan()方法使其工作。

const attributName = "values";
const attributeValue = "string1";
docClient.scan({
TableName: "Table",
ExpressionAttributeValues: {
":attribute": attributeValue,
},
FilterExpression: `contains(${attributName}, :attribute)`,
});

最新更新