DynamoDB 如何进行具有比较 2 字段的查询?
DynamoDB how to make a query that have compare 2 field?
查询模式:
获取赞成票 > 反对票的所有帖子
架构
Post = new Schema({
id: {
type: String,
hashKey: true
},
upvote: {
type: Number,
},
downvote: {
type: Number,
}
});
如何实现这种查询模式?
DynamoDB根据分区键(PK)拆分所有数据,即您的数据被分成多个服务器存储。
因此,要检索数据,您至少需要传递分区键。
我相信您的用例是 get all posts where upvotes > downvotes
由于这是一个全局查询,与 dynamodb 中的任何分区或特定条目无关table,您需要使用二级索引(通过 GSI 的稀疏索引)。
为此,您可以创建一个名为 upvotes_gt_downvotes
的附加属性,并且仅当赞成票大于反对票时才存储此属性(或存储差异以在更多查询中使用它)。此外,您需要将此新属性 (upvotes_gt_downvotes) 连同时间戳一起设置为 GSI table.
的排序键 (SK)
要获得结果,您必须扫描此 GSI。请注意,此 GSI 将仅包含满足您的查询的记录,并且一旦从记录中删除该属性,该记录就会从 GSI 中删除。
在投票时,如果此值变为 0 或 -ve,您将必须在更新记录时删除此属性。 (删除此属性会自动从 GSI 中删除记录)
查询模式:
获取赞成票 > 反对票的所有帖子
架构
Post = new Schema({
id: {
type: String,
hashKey: true
},
upvote: {
type: Number,
},
downvote: {
type: Number,
}
});
如何实现这种查询模式?
DynamoDB根据分区键(PK)拆分所有数据,即您的数据被分成多个服务器存储。
因此,要检索数据,您至少需要传递分区键。
我相信您的用例是 get all posts where upvotes > downvotes
由于这是一个全局查询,与 dynamodb 中的任何分区或特定条目无关table,您需要使用二级索引(通过 GSI 的稀疏索引)。
为此,您可以创建一个名为 upvotes_gt_downvotes
的附加属性,并且仅当赞成票大于反对票时才存储此属性(或存储差异以在更多查询中使用它)。此外,您需要将此新属性 (upvotes_gt_downvotes) 连同时间戳一起设置为 GSI table.
要获得结果,您必须扫描此 GSI。请注意,此 GSI 将仅包含满足您的查询的记录,并且一旦从记录中删除该属性,该记录就会从 GSI 中删除。
在投票时,如果此值变为 0 或 -ve,您将必须在更新记录时删除此属性。 (删除此属性会自动从 GSI 中删除记录)