我正在使用DynamoDB,并通过将JSON传递给它来存储文档,所有这些都使用DynamoDBMapper类。
它足够简单,可以将数据放入表中。如果您有可用的哈希值或范围值,还可以查询表。
但是我想(我假设)对JSON文档执行一个值扫描。我一直在寻找示例,但我找不到任何示例,或者至少在使用DynamoDBMapper方式时找不到。
那么,我认为这是可以做到的吗?如果是这样,有谁有这样做的例子吗?具体地说,如何在要查询的文档/JSON中指定属性?
我的表设置了一个Hash、Range和一个"document“属性,其中包含传递给它的JSON。那么,如果我想检查"document“中一个"name”值,我该如何在条件中指定呢?
下面是我尝试过的代码片段的示例:
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指定为"name“,但也不起作用。我没有得到任何结果。
发布于 2015-04-28 12:08:59
FilterConditions仅适用于顶级属性。您的代码片段尝试在名为"document.name“的顶级属性上放置一个FilterCondition。相反,您可以使用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);
https://stackoverflow.com/questions/29822246
复制相似问题