2017-08-24 89 views
1

的我有一个名为组的表,它就会有这样的记录:DynamoDB嵌套查询的设置对象

{ 
"id": "UniqueID1", 
"name": "Ranjeeth", 
"emailIdMappings": [ 
    { 
    "emailId": "[email protected]", 
    "userId": 324 
    }, 
    { 
    "emailId": "[email protected]", 
    "userId": 325 
    } 
] 
}, 
{ 
"id": "UniqueID2", 
"name": "Ranjeeth", 
"emailIdMappings": [ 
    { 
    "emailId": "[email protected]", 
    "userId": 325 
    }, 
    { 
    "emailId": "[email protected]", 
    "userId": 326 
    } 
] 
} 

我需要查询并得到结果如果EMAILID包含输入字符串。 我迄今达成,我不能够得到的结果

AttributeValue attributeValue = new AttributeValue("[email protected]"); 
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,但它是空的。如果你通过"[email protected]"那么你应该得到两个记录。 使用sdk是com.amazonaws:aws-java-sdk-dynamodb:1.11.155

我试图在aws论坛发布的问题没有多大帮助。

回答

0

由于您有对象列表(对象中有两个属性(即emailId和userId)),因此您需要提供两个值才能匹配项目。

如果对象具有两个属性并且只有一个在过滤器表达式中提到的属性值,则CONTAINS函数将无法匹配项目。

否则,您需要提供列表的出现(即索引)以匹配项目。

实施例: -

emailIdMappings[0].emailId = :emailIdVal