【问题标题】:Scan DynamoDB JSON document using Java and DynamoDBMapper使用 Java 和 DynamoDBMapper 扫描 DynamoDB JSON 文档
【发布时间】:2015-07-01 13:37:42
【问题描述】:

我正在使用 DynamoDB 并通过将 JSON 传递给它来存储文档,所有这些都使用 Java 中的 DynamoDBMapper 类。

将数据放入表中很简单。如果您有可用的 Hash 或 Range 值,还可以查询该表。

但我想对 JSON 文档中的值执行扫描(我假设)。我一直在寻找示例,但我找不到任何示例,或者至少在使用 DynamoDBMapper 做事方式时找不到。

那么我认为可以做到这一点是对的吗?如果是这样,有没有人有这样做的例子?具体来说,如何指定要查询的文档/JSON 中的属性?

我的表设置了一个哈希、范围和一个包含传递给它的 JSON 的“文档”属性。因此,如果我想检查该“文档”中的“名称”值,如何在 Condition 中指定?

这是我尝试过的代码 sn-p 示例:

DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
    scanExpression
            .addFilterCondition(
                    "document.name",
                    new Condition().withComparisonOperator(
                            ComparisonOperator.EQ)
                            .withAttributeValueList(
                                    new AttributeValue()
                                            .withS(existingWebsiteName)));
    List<PublisherSite> scanResult = getMapper().scan(PublisherSite.class, scanExpression);

我也尝试将attributeName 指定为“名称”,但这也不起作用。我没有返回任何结果。

【问题讨论】:

  • 您能否添加您的PublisherSite 代码和mapper.save() 呼叫以拨打MCVE
  • 首先尝试使用更简单的标量值(而不是地图或文档类型)进行查询...看看它是否有效,请放置一些您存储在数据库中的 JSON 示例。谢谢

标签: java amazon-dynamodb document-database


【解决方案1】:

FilterConditions 仅适用于顶级属性。您的 sn-p 尝试将 FilterCondition 放在名为“document.name”的顶级属性上。相反,您可以使用FilterExpression 来根据嵌套属性设置项目检索条件,并且可以使用ProjectionExpression 来选择您想要的顶级和嵌套属性。

final String filterExpression = "document.name = :existingWebsiteName";
final Map<String, AttributeValue> expressionAttributeValues = Collections.singletonMap(":existingWebsiteName", existingWebsiteName);

DynamoDBScanExpression scanExpression = new DynamoDBScanExpression()
    .withFilterExpression("document.name = :existingWebsiteName")
    .withExpressionAttributeValues(expressionAttributeValues);
List<PublisherSite> scanResult = getMapper().scan(PublisherSite.class, scanExpression);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    相关资源
    最近更新 更多