我有一个DDB表,其中哈希键作为id(字符串(,排序键作为flag(布尔值(。我想获取表中标志值为true的所有项。我没有设置任何GSI或LSI,但如果需要,我可以创建它们。
架构
{
"id": {
"S": "<Some ID>"
},
"flag": {
"B": "<true/false>"
}
}
您说您有一个布尔排序键,但不支持boolean类型的DynamodDB排序键。相反,您可以使用数字(0/1(或字符串("false"/"true"(来表示布尔值。如果索引不是排序键,也可以考虑使其稀疏。
要查询排序关键字为true(false(的所有项,您将需要一个GSI,因为LSI的范围仅限于一个散列关键字。因此,您可能应该在";布尔值";(实际上是字符串或数字(字段。请注意,GSI只能在具有最终一致性的情况下查询,因此在选择GSI之前请考虑您的用例。
由于您有一个hash key
作为PK,这意味着您的flag
分布在多个分区中,而一个带有PK的普通查询,SK永远不会给您完整的数据。
要在全局级别(即所有分区(进行查询,您需要创建一个GSI。
对于查询get all items with flag as true
:
- 当flag标记为true时,为项的架构添加一个新属性
- 创建一个GSI,其中PK作为哈希,SK作为这个新属性,以及您需要获取的属性数据
当您更新项目并添加新属性时,它将在GSI中创建一个条目。因此,您的GSI将只有flag = true
的条目