我的DynamoDB中有像这样的对象:
{
'id': '2d47218a-9a9b-45a6-acbc-152bc49e93ad'
'people': [
{
'name': 'John',
'surname': 'Snow'
},
{
'name': 'John',
'surname': 'Smith'
},
{
'name': 'James',
'surname': 'Bond'
},
]
}
我应该使用什么过滤器表达式来查找至少有一个人姓名为John的所有对象?
我尝试了类似的东西,但它不起作用:
DynamoDBScanExpression expression = new DynamoDBScanExpression()
.withFilterExpression("people.name = :name")
.withExpressionAttributeValues(
ImmutableMap.of(":name", new AttributeValue().withS("John")
.withConsistentRead(true);
DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(amazonDynamoDB);
PaginatedScanList<Person> scan = dynamoDBMapper.scan(Person.class, expression);
答案 0 :(得分:1)
不幸的是,这在DynamoDB上是不可能的,因为该对象具有复杂的结构(即DynamoDB在List中的术语Map)。
您需要name
和surname
属性值才能使用 CONTAINS 功能过滤项目。
如果您只有name
属性值,则无法过滤该项目。
列表支持CONTAINS:评估&#34; a CONTAINS b&#34;,&#34; a&#34; 可以是一个清单;然而,&#34; b&#34;不能是集合,地图或列表。