我正在使用DynamoDB并通过将JSON传递给它来存储文档,所有这些都使用Java中的DynamoDBMapper类。
将数据放入表中非常简单。如果您有可用的哈希值或范围值,也可以查询表。
但我想用JSON文档对值进行扫描(我推测)。我一直在寻找一些例子,但我找不到任何东西,或者至少在使用DynamoDBMapper的方式时找不到。
那么我认为可以做到这一点是正确的吗?如果是这样,有没有人有这样做的例子?具体来说,如何在文档/ JSON中指定要查询的属性?
我的表设置了哈希,范围和“文档”属性,其中包含传递给它的JSON。因此,如果我想检查该“文档”中的“名称”值,如何在条件中指定它?
以下是我尝试过的代码段示例:
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”,但这也不起作用。我没有得到任何结果。
答案 0 :(得分:1)
FilterConditions仅适用于顶级属性。您的代码段尝试将FilterCondition放在名为&#34; document.name&#34;的顶级属性上。相反,您可以使用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);