是否有可能在DynamoDB“OR”,“和”查询操作的工作?Dynamodb查询操作
我需要知道,如果DynamoDB
有从SQL查询类似"where fname = xxxx OR lname = xxxx
“?Rails中
感谢。
是否有可能在DynamoDB“OR”,“和”查询操作的工作?Dynamodb查询操作
我需要知道,如果DynamoDB
有从SQL查询类似"where fname = xxxx OR lname = xxxx
“?Rails中
感谢。
在一般情况下,没有。
DynamoDB只允许由初级(散)进行有效的查找键,加上一个范围之间的“范围键”。其他属性不被索引的查询。
您可以通过一组属性使用Scan
请求读取整个表滤波器,但对于大型表来说,这是一个相对昂贵和缓慢的选项。
可以通过创建包含这两个值主键模拟与被查询,和或通过用BatchGetItem
作为创建各自使用一个属性作为其主键的重复表,查询在平行两个表BCoates提到答案是NO。
如果你想要一致的读取,那么你不能使用BatchGetItem。
不,它不可能使用 '或' 操作, 例如在 KeyConditionExpression: '#hashkey =:hk_val和#rangekey>:rk_val',
它采用而操作匹配for bot HASH和RANGE Key。
因此,我们不能在Dynamo Db中使用或。
虽然没有这样的事情“或”,“AND”,但你仍然可以使用扫描和filterexpression模拟SQL查询。
但请记住,如果您正在使用扫描,那么它意味着整个表格将被提取并处理,同时扫描并不总是在一次迭代中扫描整个表格。所以你可能会错过一些项目。所以通常避免这种方法,因为它非常昂贵。但这里是用boto3 API的python3代码块,可以模拟SQL查询你想
response = table.scan(
FilterExpression=Attr('fname').eq('xxxxx') | Attr('lname').eq('xxxxx'))
filterexpression也不同运营商移动像&,〜
RTFM?文档是找到这样的答案的好地方。 – 2012-02-22 05:12:53
http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/queryingdynamodb.html – Hal 2012-02-22 17:58:19