具有以下内容(表名:"表"(:
[
{
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中获取所有项目,然后用自己的方法进行查询?
谢谢大家!
对于这种查询模式,您可能应该重新考虑您的数据模型,我建议这样做:
PK | GSI1PK | GSI1SK |
---|---|---|
NAME#name1 | VALUE#val1 | NAME#name1 |
名称#name1 | VALUE#val2 | 名称#名称1|
名称#name1 | VALUE#val3 | 名称#名称1|
名称#name2 | VALUE#val1 | 名称#名称2
我通过使用aws-sdk
中的.scan()
方法使其工作。
const attributName = "values";
const attributeValue = "string1";
docClient.scan({
TableName: "Table",
ExpressionAttributeValues: {
":attribute": attributeValue,
},
FilterExpression: `contains(${attributName}, :attribute)`,
});