2012-02-22 57 views
4

是否有可能在DynamoDB“OR”,“”查询操作的工作?Dynamodb查询操作

我需要知道,如果DynamoDB有从SQL查询类似"where fname = xxxx OR lname = xxxx“?Rails中

感谢。

+0

RTFM?文档是找到这样的答案的好地方。 – 2012-02-22 05:12:53

+0

http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/queryingdynamodb.html – Hal 2012-02-22 17:58:19

回答

6

在一般情况下,没有。

DynamoDB只允许由初级(散)进行有效的查找键,加上一个范围之间的“范围键”。其他属性不被索引的查询。

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

可以通过创建包含这两个值主键模拟与被查询,和或通过用BatchGetItem

1

作为创建各自使用一个属性作为其主键的重复表,查询在平行两个表BCoates提到答案是NO。

如果你想要一致的读取,那么你不能使用BatchGetItem。

0

不,它不可能使用 '或' 操作, 例如在 KeyConditionExpression: '#hashkey =:hk_val和#rangekey>:rk_val',

它采用操作匹配for bot HASH和RANGE Key。

因此,我们不能在Dynamo Db中使用

0

虽然没有这样的事情“或”“AND”,但你仍然可以使用扫描filterexpression模拟SQL查询。

但请记住,如果您正在使用扫描,那么它意味着整个表格将被提取并处理,同时扫描并不总是在一次迭代中扫描整个表格。所以你可能会错过一些项目。所以通常避免这种方法,因为它非常昂贵。但这里是用boto3 API的python3代码块,可以模拟SQL查询你想

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

filterexpression也不同运营商移动像&,〜