Dynamodb查询操作

时间:2012-02-22 05:05:24

标签: amazon-web-services amazon-dynamodb

是否可以在DynamoDB中使用“ OR ”,“ AND ”查询操作?

我需要知道DynamoDB是否有来自SQL查询的"where fname = xxxx OR lname = xxxx“?在Rails中

感谢。

4 个答案:

答案 0 :(得分:6)

一般来说,没有。

DynamoDB仅允许通过主(哈希)键进行有效查找,并且可选地对“范围键”进行范围查询。其他属性未编入索引。

您可以使用Scan请求通过一组属性读取整个表过滤器,但对于大型表来说,这是一个相对昂贵且速度较慢的选项。

您可以通过创建包含要查询的值的主键来模拟AND,并通过创建每个使用一个属性作为主键的重复表来创建OR,并与BatchGetItem并行查询这两个表

答案 1 :(得分:1)

正如BCoates所说,答案是否定的。

如果您想要一致性读取,则无法使用BatchGetItem。

答案 2 :(得分:0)

不能使用'或'运营商, 例如在 KeyConditionExpression:' #hashkey =:hk_val AND #rangekey> :rk_val',

它使用运算符来匹配bot HASH和RANGE键。

因此我们无法在Dynamo Db中使用 OR

答案 3 :(得分:0)

虽然没有“OR”“AND”这样的东西,但您仍然可以使用扫描和<来模拟SQL查询强> filterexpression

但请记住,如果您正在使用扫描,则表示将获取整个表然后进行处理,同时扫描并不总是在一次迭代中扫描整个表。所以你可能错过了一些项目。所以通常避免使用这种方法,因为它非常昂贵。但这里有一段使用boto3 api的python3代码,可以模拟你想要的SQL查询

response = table.scan(
FilterExpression=Attr('fname').eq('xxxxx') | Attr('lname').eq('xxxxx'))

filterexpression也有不同的操作者,如&amp;,〜