对布尔键的 DynamoDB 查询

DynamoDB query on boolean key

我是 DynamoDB 的新手(一般来说也是 noSQL 的新手),在理解一些概念时有点费力。特别是给我一些问题,这是围绕基于布尔键查询 table。

我意识到我无法在布尔键上创建主索引或辅助索引,但我看不出我应该如何理想地索引和查询具有以下结构的 table;

reportId: string (uuid)
reportText: string
isActive: boolean
category: string

我希望能够完成以下搜索:

  1. 直接访问特定报告(reportId 的主哈希索引)
  2. 列出特定类别的报告(主哈希索引 类别)

这些都很简单,但我想执行另外两个查询;

  1. 列出所有标记为 isActive = true 的报告
  2. 列出标记为 isActive 的特定类别的所有报告 = 真

我的第一个方法是在 isActive 上创建一个主哈希键索引,在 category 上创建一个范围键,但我只能选择 StringNumber Binary 作为属性类型。

isActive 存储为字符串(另存为 'true' 而不是布尔值 true)解决了问题,但是将字符串用于布尔值 属性.[=18 是很可怕的=]

我错过了什么吗?有没有一种直接在布尔值上查询 table 的简单方法?

非常感谢任何建议。

提前致谢。

我的项目包括这个特定场景,我遵循了在本地和全局二级索引上使用 sparse indexes 的 DynamoDB 最佳实践。这是我将对您的示例执行的操作:

Table: reportId (string, hash key) || reportText (string) || isActive (string, marked as "x") || category (string)

ActiveReportsIndex (Local Secondary Index): reportID (hash key) || isActive (range key)

ActiveReportsByCategoryIndex (Global Secondary Index): category (hash key) || isActive (range key) || reportId

稀疏索引背后的想法是,只有标记为 isActive: "x" 的报告才会显示在您的索引中,因此与您的主要 table 相比,它们需要更少的存储和处理。不要将 isActive 属性设为布尔类型,它将始终存储 truefalse 值,而是使用 "x" 之类的字符串或报告处于活动状态时您想要的任何其他内容并删除当报表不活动时,属性完全。有道理吗?

UPDATE:如果您在查询时需要特定类型的排序(例如按时间顺序排列),请使用数字(例如 unix 时间戳)而不是 "x"字符串。