是否可以在DynamoDB中使用“ OR ”,“ AND ”查询操作?
我需要知道DynamoDB
是否有来自SQL查询的"where fname = xxxx OR lname = xxxx
“?在Rails中
感谢。
答案 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;,〜