Nik*_*las 5 ios amazon-dynamodb swift aws-sdk
如何使用布尔值表达式过滤 dynamoDB 表。我可以成功过滤 Int 或 String 值。但即使在 Web 控制台中尝试对 bool 值创建过滤表达式时,它也不会返回任何结果?
我也在 iOS 上的 Swift 上尝试了这一点,但事实上它甚至在 Web 界面中都不起作用,这让我想知道如何实现这一点。
如果我过滤 Int 它会起作用,即
let queryExpression = AWSDynamoDBQueryExpression()
queryExpression.rangeKeyConditionExpression = "age = :val"
queryExpression.expressionAttributeValues = [":val": 30]
Run Code Online (Sandbox Code Playgroud)
但如果我尝试使用 Bool,它什么也不会返回。
let queryExpression = AWSDynamoDBQueryExpression()
queryExpression.rangeKeyConditionExpression = "enabled = :val"
queryExpression.expressionAttributeValues = [":val": true]
Run Code Online (Sandbox Code Playgroud)
我还尝试过用 0 或 1 代替 true,或者使用“true”中的字符串。
然而,这种对 Bool 的过滤甚至在 AWS Web 界面中都不起作用。所以这看起来不是 Swift 的事情。也许这是不可能的,但看起来很奇怪。
事实证明我在这里很困惑,filterExpression 工作正常。
let scanExpression = AWSDynamoDBScanExpression()
scanExpression.filterExpression = "disabled = :val"
scanExpression.expressionAttributeValues = [":val": false]
Run Code Online (Sandbox Code Playgroud)
文档对此不是很清楚,但不可能在 DynamoDB 中使用布尔哈希或范围键创建表。哈希键和范围键只能是字符串 (S)、数字 (N) 或二进制 (B) 类型。如果您尝试创建带有布尔 (BOOL) 范围键的表,例如:
create_table(
AttributeDefinitions=[
{'AttributeName': 'something', 'AttributeType': 'S'},
{'AttributeName': 'enabled', 'AttributeType': 'BOOL'}
],
TableName='example',
KeySchema=[
{'AttributeName': 'something', 'KeyType': 'HASH'},
{'AttributeName': 'enabled', 'KeyType': 'RANGE'},
]
...
)
Run Code Online (Sandbox Code Playgroud)
如果“启用”范围键的类型为“S”、“N”或“B”,则调用将失败。
如果您想在范围键中有效地存储布尔值,您应该使用数字类型并分配 0 和 1 值,可以像您已经演示的那样进行过滤。
如果您有一个不是哈希键或范围键的布尔值,则可以使用 FilterExpression 而不是 RangeKeyConditionExpression 对其进行过滤,如FilterExpression 文档中所述。
| 归档时间: |
|
| 查看次数: |
9872 次 |
| 最近记录: |