DynamoDB DynamoDBQueryExpression混合条件运算符

时间:2016-09-01 04:56:08

标签: java amazon-web-services amazon-dynamodb nosql

使用DynamoDBQueryExpression执行复杂查询的最佳方法是什么。

默认情况下,fetch将在提供的所有条件上执行AND。

我如何执行类似的事项(C1&& C2&&(C3 || C4 || C5))?甚至可以使用DynamoDB java api吗?

1 个答案:

答案 0 :(得分:2)

DynamoDB使用" com.amazonaws.services.dynamodbv2.document.spec.QuerySpec"支持复杂条件。您可以使用FilterExpression编写AND和OR条件。

请参阅以下示例: -

1)withKeyConditionExpression - 用于散列键和范围键表达式

2)withFilterExpression - 用于所有其他属性(即除了键属性之外)

ItemCollection<QueryOutcome> items = null;

        QuerySpec querySpec = new QuerySpec();

        ValueMap valueMap = new ValueMap();
        valueMap.withString(":autoIdVal", autoID);
        valueMap.withString(":docTypeVal", docType);
        valueMap.withString(":username", username);
        valueMap.withString(":comment", comment);

        Map<String, String> nameMap = new LinkedHashMap<>();
        nameMap.put("#comment", "comment");

        querySpec.withKeyConditionExpression("autoID = :autoIdVal").withFilterExpression("(docType = :docTypeVal AND username = :username) OR (#comment = :comment)")
                .withValueMap(valueMap)
                .withNameMap(nameMap);

        items = table.query(querySpec);

        Iterator<Item> iterator = items.iterator();

        Item itemData = null;

        while (iterator.hasNext()) {
            itemData = iterator.next();

            System.out.println("Json data ====================>" + itemData.toJSONPretty());

        }