Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon dynamodb “编写dynamoDB”;或;条件查询?_Amazon Dynamodb - Fatal编程技术网

Amazon dynamodb “编写dynamoDB”;或;条件查询?

Amazon dynamodb “编写dynamoDB”;或;条件查询?,amazon-dynamodb,Amazon Dynamodb,我想用布尔或类似SQL的条件查询dynamodb表 e、 g.获取attribute1=“否”或attribute2=“否”的所有项目 我尝试了scanRequest.withScanFilter,但是所有的条件都是通过布尔和运算来执行的。如何进行布尔运算。您可以将ScanRequest的ConditionalOperator设置为“或”。默认值为“和” ScanRequest ScanRequest=新的ScanRequest(“表名”); scanRequest.setConditiona

我想用布尔或类似SQL的条件查询dynamodb表 e、 g.
获取attribute1=“否”或attribute2=“否”的所有项目


我尝试了
scanRequest.withScanFilter
,但是所有的条件都是通过布尔和运算来执行的。如何进行布尔运算。

您可以将ScanRequest的ConditionalOperator设置为“或”。默认值为“和”

ScanRequest ScanRequest=新的ScanRequest(“表名”);
scanRequest.setConditionalOperator(ConditionalOperator.OR);
Map scanFilter=new HashMap();
scanFilter.put(“attribute1”,new Condition()。with AttributeValue列表(new AttributeValue(“no”))。with ComparisonOperator(ComparisonOperator.EQ));
scanFilter.put(“attribute2”,new Condition()。with AttributeValue列表(new AttributeValue(“no”))。with ComparisonOperator(ComparisonOperator.EQ));
scanRequest.setScanFilter(扫描过滤器);
ScanResult ScanResult=dynamo.scan(scanRequest);
对于(映射项:scanResult.getItems()){
系统输出打印项次(项);
}

如果您碰巧知道
HashKey
值,另一个选项是使用QUERY和filtereexpression。以下是Java SDK的一个示例:

Table Table=dynamoDB.getTable(tableName);
Map expressionAttributeValues=新HashMap();
expressionAttributeValues.put(“:x”,“no”);
expressionAttributeValues.put(“:y”,“no”);
QuerySpec spec=新QuerySpec()
.withHashKey(“HashKeyAttributeName”、“HashKeyValueHere”)
.withFilterExpression(“attribute1=:x或attribute2=:y”)
.带ValueMap(表达式属性值);
ItemCollection items=table.query(spec);
迭代器迭代器=items.Iterator();
while(iterator.hasNext()){
System.out.println(iterator.next().toJSONPretty());
}

有关更多详细信息,请参阅。

您也可以在筛选器表达式中使用括号:

const参数={
表名:process.env.PROJECTS\u表,
IndexName:“teamId创建数据索引”,
KeyConditionExpression:'teamId=:teamId',
表达式属性值:{
“:teamId”:已验证jwt.teamId,
“:userId”:verifiedJwt.userId,
“:提供程序”:已验证的jwt.provider
},
FilterExpression:'attribute_exists(isNotDeleted)和((attribute_not_exists(isPrivate))或(attribute_exists(isPrivate)和userId=:userId和provider=:provider))'
};

使用扫描时要小心。您将为扫描的所有行收费,而不是返回的行。如果表中包含大量数据,您真的不应该在生产中使用扫描。请注意,过滤表达式对查询结果进行操作,您需要根据查询的大小付费。因此,如果您有大量与每个hashKey相关联的数据,那么每次运行过滤器表达式时,您都要付出高昂的代价。