在布尔键上的DynamoDB查询
我是DynamoDB的新手(对于一般的noSQL),并且为了让我的头脑围绕一些概念而挣扎。 有一件事情特别是给我一些问题,这是围绕一个布尔键查询表的问题。
我意识到我不能创build一个布尔键的主要或次要索引,但我不明白我应该如何理想地索引和查询具有以下结构的表;
reportId: string (uuid) reportText: string isActive: boolean category: string
我希望能够完成以下search:
- 直接访问特定报告(
reportId
的主散列索引) - 列出特定类别的报告(类别上的主要哈希索引)
这些都是直截了当的,但我想要执行另外两个查询;
- 列出所有标记为isActive = true的报告
- 列出标记为isActive = true的特定类别的所有报告
我的第一种方法是在isActive
上创build一个主要的hashkey索引,并使用category
,但是我只能selectString
, Number
of Boolean
作为键types。
存储isActive
作为一个string(保存为“真”而不是布尔真)解决了这个问题,但它使用一个string可怕的布尔属性。
我错过了什么吗? 有一个简单的方法直接查询表的布尔值?
任何build议非常感激。
提前致谢。
我的项目包含了这个特定的场景,并且我遵循了在本地和全局二级索引上使用稀疏索引的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”才会显示在索引中,因此它们需要的存储和处理比主表要less。 而不是使isActive属性为布尔types,它将始终存储true
或false
值,使用报告处于活动状态时使用“x”或任何其他您希望的string,并在报告处于非活动状态时完全删除属性。 说得通?