我想使用布尔或条件查询dynamodb表,就像SQL一样。
例如:获取所有属性1 =“no”或属性2 =“no”的项目
我尝试过使用scanRequest.withScanFilter
,但所有条件都是通过进行布尔AND操作执行的。 我该如何执行布尔OR操作?
我想使用布尔或条件查询dynamodb表,就像SQL一样。
例如:获取所有属性1 =“no”或属性2 =“no”的项目
我尝试过使用scanRequest.withScanFilter
,但所有条件都是通过进行布尔AND操作执行的。 我该如何执行布尔OR操作?
ScanRequest scanRequest = new ScanRequest("tableName");
scanRequest.setConditionalOperator(ConditionalOperator.OR);
Map<String, Condition> scanFilter = new HashMap<String, Condition>();
scanFilter.put("attribute1", new Condition().withAttributeValueList(new AttributeValue("no")).withComparisonOperator(ComparisonOperator.EQ));
scanFilter.put("attribute2", new Condition().withAttributeValueList(new AttributeValue("no")).withComparisonOperator(ComparisonOperator.EQ));
scanRequest.setScanFilter(scanFilter);
ScanResult scanResult = dynamo.scan(scanRequest);
for(Map<String, AttributeValue> item : scanResult.getItems()) {
System.out.println(item);
}
在FilterExpression中,您也可以使用方括号:
const params = {
TableName: process.env.PROJECTS_TABLE,
IndexName: 'teamId-createdAt-index',
KeyConditionExpression: 'teamId = :teamId',
ExpressionAttributeValues: {
':teamId': verifiedJwt.teamId,
':userId': verifiedJwt.userId,
':provider': verifiedJwt.provider
},
FilterExpression: 'attribute_exists(isNotDeleted) and ((attribute_not_exists(isPrivate)) or (attribute_exists(isPrivate) and userId = :userId and provider = :provider))'
};
HashKey
值,另一个选项是使用QUERY和FilterExpression。以下是使用Java SDK的示例:Table table = dynamoDB.getTable(tableName);
Map<String, Object> expressionAttributeValues = new HashMap<String, Object>();
expressionAttributeValues.put(":x", "no");
expressionAttributeValues.put(":y", "no");
QuerySpec spec = new QuerySpec()
.withHashKey("HashKeyAttributeName", "HashKeyValueHere")
.withFilterExpression("attribute1 = :x or attribute2 = :y")
.withValueMap(expressionAttributeValues);
ItemCollection<QueryOutcome> items = table.query(spec);
Iterator<Item> iterator = items.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next().toJSONPretty());
}
请参阅使用条件表达式指定条件获取更多详细信息。