如何使用 DynamoDBMapper Java 在 DynamoDB 中包含函数?
Ho to use contains function in DynamoDB with DynamoDBMapper Java?
我需要用 contains
函数检查数据列表是 DynamoDB。以下是我的 Java 代码,
List<String> dataList = new ArrayList<>();
我将上面的列表插入到名为 Data.JSON 的 JSON 中。
Map<String, AttributeValue> valueMap = new HashMap<>();
valueMap.put(":v", new AttributeValue().withS(String.valueOf(dataList)));
Map<String, String> nameMap = new HashMap<>();
nameMap.put("#list", "Data.list");
DynamoDBQueryExpression<> queryExpression = new DynamoDBQueryExpression<>()
.withFilterExpression("contains(#list, :v)")
.withExpressionAttributeNames(nameMap)
.withExpressionAttributeValues(valueMap)
.withConsistentRead(false);
我用了上面的方法,但是没有用。我需要的是,如果任何列表值包含在 dynamo db 插入的列表值中,我需要过滤数据。列表数据在 Json 内。那么我在这里做错了什么?有谁能够帮助我?提前致谢。
- 您的查询没有
withKeyConditionExpression
作为构建 DynamoDBQueryExpression
的一部分。
FilterExpression
并未改善您的 RCU 消耗。它增加的价值很少。我更喜欢使用干净的查询对象 ( ddbMapper.query(Object)
) 和过滤 post 获得响应。
来自docs-
A filter expression is applied after a Query finishes, but before the results are returned. Therefore, a Query consumes the same amount of read capacity, regardless of whether a filter expression is present.
注:
如果仍然希望在 DynamoDB 查询中执行此操作,则需要确保提供的 AttributeValue
类型正确。
来自docs-
An attribute of type String Set. For example:
"SS": ["Giraffe", "Hippo" ,"Zebra"]
Type: Array of strings
所以,这里从 new AttributeValue().withS
更改为 new AttributeValue().withSS
以应用于列表。请注意,您仍然需要将对象降低到 DDB 可以理解的 AttributeValue
粒度。
这个 doc 有更高级的样本。
我需要用 contains
函数检查数据列表是 DynamoDB。以下是我的 Java 代码,
List<String> dataList = new ArrayList<>();
我将上面的列表插入到名为 Data.JSON 的 JSON 中。
Map<String, AttributeValue> valueMap = new HashMap<>();
valueMap.put(":v", new AttributeValue().withS(String.valueOf(dataList)));
Map<String, String> nameMap = new HashMap<>();
nameMap.put("#list", "Data.list");
DynamoDBQueryExpression<> queryExpression = new DynamoDBQueryExpression<>()
.withFilterExpression("contains(#list, :v)")
.withExpressionAttributeNames(nameMap)
.withExpressionAttributeValues(valueMap)
.withConsistentRead(false);
我用了上面的方法,但是没有用。我需要的是,如果任何列表值包含在 dynamo db 插入的列表值中,我需要过滤数据。列表数据在 Json 内。那么我在这里做错了什么?有谁能够帮助我?提前致谢。
- 您的查询没有
withKeyConditionExpression
作为构建DynamoDBQueryExpression
的一部分。 FilterExpression
并未改善您的 RCU 消耗。它增加的价值很少。我更喜欢使用干净的查询对象 (ddbMapper.query(Object)
) 和过滤 post 获得响应。
来自docs-
A filter expression is applied after a Query finishes, but before the results are returned. Therefore, a Query consumes the same amount of read capacity, regardless of whether a filter expression is present.
注:
如果仍然希望在 DynamoDB 查询中执行此操作,则需要确保提供的 AttributeValue
类型正确。
来自docs-
An attribute of type String Set. For example:
"SS": ["Giraffe", "Hippo" ,"Zebra"]
Type: Array of strings
所以,这里从 new AttributeValue().withS
更改为 new AttributeValue().withSS
以应用于列表。请注意,您仍然需要将对象降低到 DDB 可以理解的 AttributeValue
粒度。
这个 doc 有更高级的样本。