【问题标题】:DynamoDB nested attribute querying supportDynamoDB 嵌套查询支持
【发布时间】:2015-08-26 19:49:25
【问题描述】:

Amazon DynamoDB 扫描操作是否允许您查询 ArrayObject 类型的嵌套属性?例如,

{
    Id: 206,
    Title: "20-Bicycle 206",
    Description: "206 description",
    RelatedItems: [
        341, 
        472, 
        649
    ],
    Pictures: {
        FrontView: "123", 
        RearView: "456",
        SideView: "789"
    }
}

我可以查询RelatedItems[2]Pictures.RearView 属性吗?

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

    是的,您可以使用Filter Expression,就像条件表达式一样。讨论您可以在这些类型的表达式中使用的the functions 部分提到了以下内容:

    “对于嵌套属性,您必须提供其完整路径;有关详细信息,请参阅Document Paths。”

    Document Paths 参考提供了有关如何在 DynamoDB data types 中引用嵌套属性的示例,例如 List(您所称的数组)和 Map(您所称的对象)。查看该参考以获取有关如何执行此操作的示例:

    • 我的列表[0]
    • 另一个列表[12]
    • 这个列表[5][11]
    • MyMap.nestedField
    • MyMap.nestedField.deeplyNestedField

    【讨论】:

    【解决方案2】:

    请注意,在 DyanomoDB 中,queryscan 完全不同(scan 的操作成本更高)。因此,尽管您可以像@coffeeplease 指出的那样过滤两者;您只能查询/索引:

    索引的键模式。索引键架构中的每个属性都必须是字符串、数字或二进制类型的顶级属性。不允许使用其他数据类型,包括文档和集合 (ref)。

    【讨论】:

      【解决方案3】:

      是的,您可以通过传递列表或值。

      data = table.scan(FilterExpression=Attr('RelatedItems').contains([1, 2, 3]) & Attr('Pictures.RearView').eq('1'))
      

      【讨论】:

        【解决方案4】:

        是的,您可以使用 scan 或 query 查询数组或对象类型的嵌套属性。

        Python boto3 参考: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/dynamodb.html#querying-and-scanning

        示例:假设您要查找RearView" > 500RelatedItems" > 200 的第二项的记录,您可以执行以下操作:

        data = table.scan(
            FilterExpression=Attr('RelatedItems[1]').gt('200') & Attr('Pictures.RearView').gt('500'))
        

        【讨论】:

        • 如何使用 DynamoDBScanExpression(Java) 做到这一点?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-28
        相关资源
        最近更新 更多