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 中删除记录)