2017-08-24 3 views
1

J'ai une table appelée groupe et il aura des dossiers comme:DynamoDB requête pour Nested Jeu de l'objet

{ 
"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 
    } 
] 
} 

J'ai besoin d'interroger et d'obtenir le résultat si emailId contient la chaîne d'entrée. Je suis arrivé à ce jour et je ne suis pas en mesure d'obtenir le résultat

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()); 

Pour le code ci-dessus, je me attends record avec id UniqueID1, mais il est vide. Si vous passez "[email protected]" alors vous devriez obtenir les deux enregistrements. sdk utilisé est com.amazonaws:aws-java-sdk-dynamodb:1.11.155

J'ai essayé de poster la question dans le forum d'aws qui n'a pas aidé beaucoup.

Répondre

0

Comme vous avez List of Objects qui a deux attributs dans un objet (par exemple emailId et userId), vous devez fournir les deux valeurs pour correspondre à l'élément.

La fonction CONTAINS ne sera pas capable de faire correspondre l'élément si l'objet a deux attributs et une seule valeur d'attribut mentionnée dans l'expression de filtre.

Sinon, vous devez fournir l'occurrence (c'est-à-dire l'index) de la liste pour qu'elle corresponde à l'élément.

Exemple: -

emailIdMappings[0].emailId = :emailIdVal