我有一个名为Group的表,它将有如下记录:
{
"id": "UniqueID1",
"name": "Ranjeeth",
"emailIdMappings": [
{
"emailId": "r.pt@r.com",
"userId": 324
},
{
"emailId": "r1.pt@r.com",
"userId": 325
}
]
},
{
"id": "UniqueID2",
"name": "Ranjeeth",
"emailIdMappings": [
{
"emailId": "r1.pt@r.com",
"userId": 325
},
{
"emailId": "r2.pt@r.com",
"userId": 326
}
]
}
如果emailId包含输入字符串,我需要查询并获取结果。 到目前为止,我已达不到结果
AttributeValue attributeValue = new AttributeValue("r.pt@r.com");
Condition containsCondition = new Condition()
.withComparisonOperator(ComparisonOperator.CONTAINS)
.withAttributeValueList(attributeValue);
Map<String, Condition> conditions = newHashMap();
conditions.put("emailIdMappings.emailId", containsCondition);
ScanRequest scanRequest = new ScanRequest()
.withTableName("Group")
.withScanFilter(conditions);
amazonDynamoDB.scan(scanRequest)
dynamoDBMapper.marshallIntoObjects(Group.class, scanResult.getItems());
对于上面的代码,我期待ID为UniqueID1的记录,但它是空的。如果你通过"r1.pt@r.com"
那么你应该得到两个记录。
使用的sdk是com.amazonaws:aws-java-sdk-dynamodb:1.11.155
我尝试在aws论坛中发布这个问题并没有多大帮助。
答案 0 :(得分:0)
由于您拥有对象列表,该对象在对象中具有两个属性(即emailId和userId),因此您需要提供这两个值才能匹配该项目。
如果对象有两个属性且过滤器表达式中只提到一个属性值,则CONTAINS
函数将无法匹配该项。
否则,您需要提供列表的匹配项(即索引)以匹配项目。
示例: - 强>
emailIdMappings[0].emailId = :emailIdVal