Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 基于布尔键的DynamoDB查询_Node.js_Amazon Web Services_Amazon Dynamodb_Amazon_Nosql - Fatal编程技术网

Node.js 基于布尔键的DynamoDB查询

Node.js 基于布尔键的DynamoDB查询,node.js,amazon-web-services,amazon-dynamodb,amazon,nosql,Node.js,Amazon Web Services,Amazon Dynamodb,Amazon,Nosql,我对DynamoDB(以及一般的noSQL)还不熟悉,我正在努力了解一些概念。一件特别的事情是给了我一些问题,这是关于基于布尔键查询表的问题 我意识到我不能在一个布尔键上创建一个主索引或二级索引,但我看不出我应该如何理想地索引和查询具有以下结构的表 reportId: string (uuid) reportText: string isActive: boolean category: string 我希望能够完成以下搜索: 直接访问特定报表(主散列索引为reportId) 列出特定类别的报

我对DynamoDB(以及一般的noSQL)还不熟悉,我正在努力了解一些概念。一件特别的事情是给了我一些问题,这是关于基于布尔键查询表的问题

我意识到我不能在一个布尔键上创建一个主索引或二级索引,但我看不出我应该如何理想地索引和查询具有以下结构的表

reportId: string (uuid)
reportText: string
isActive: boolean
category: string
我希望能够完成以下搜索:

  • 直接访问特定报表(主散列索引为
    reportId
  • 列出特定类别的报告(上的主哈希索引) (类别)
  • 这两个都很简单,但我想执行另外两个查询

  • 列出标记为isActive=true的所有报告
  • 列出标记为isActive的特定类别的所有报告 =正确
  • 我的第一种方法是在
    isActive
    上创建一个主hashkey索引,在
    category
    上创建一个rangekey,但我只能选择
    String
    Number
    二进制
    作为属性类型

    isActive
    存储为字符串(另存为'true'而不是布尔值true)可以解决问题,但使用字符串作为布尔值属性很可怕

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

    如有任何建议,不胜感激


    提前感谢。

    我的项目包括这个特定场景,我遵循了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”的报告才会显示在索引中,因此它们所需的存储和处理应该比主表少。不要将isActive属性设置为布尔类型(它将始终存储
    true
    false
    值),而是在报告处于活动状态时使用“x”之类的字符串或任何其他您想要的内容,并在报告处于非活动状态时完全删除该属性。有道理吗


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

    这非常完美,并且很好地解决了这一问题。我没有看到有关稀疏索引的参考资料(也没有看到您包含的最佳实践链接),但似乎正是我所需要的。这确实像是对dynamo的限制,您无法基于布尔值进行查询,您必须处理自己的应用程序逻辑才能将其转换为布尔类型。如何在
    ActiveReportsIndex
    上创建查询以检索所有活动报告?这难道不需要扫描那个索引吗?@SankethKatta是的,没错。检索任何索引或表中的所有行都需要扫描。根据这一点,
    1
    将是2个字节,
    “X”
    将是1个字节@readyornot