2016-03-09 25 views
3

如何使用bool值上的表達式過濾dynamoDB表。我可以在Int或String值上成功過濾。但即使在Web控制檯中,當試圖在bool值上創建過濾器表達式時,它也不會返回任何結果?DynamoDB如何在bool值上使用過濾器表達式

我試圖從Swift在iOS上,以及它甚至不工作int他的Web界面使我想知道如何在所有實現這一點。

如果我在一個Int它的工作原理過濾,即

let queryExpression = AWSDynamoDBQueryExpression() 
    queryExpression.rangeKeyConditionExpression = "age = :val" 
    queryExpression.expressionAttributeValues = [":val": 30] 

但是,如果我嘗試的布爾它什麼也沒有回來。

let queryExpression = AWSDynamoDBQueryExpression() 
    queryExpression.rangeKeyConditionExpression = "enabled = :val" 
    queryExpression.expressionAttributeValues = [":val": true] 

我也嘗試了0或1來代替true,或者像「true」那樣的字符串。

但是,Bool上的這種過濾在AWS Web界面中甚至不起作用。所以這不是一個Swift的東西。也許這是不可能的,但似乎很奇怪。

原來我很困惑,filterExpression工作正常。

let scanExpression = AWSDynamoDBScanExpression() 
    scanExpression.filterExpression = "disabled = :val" 
    scanExpression.expressionAttributeValues = [":val": false] 
+0

任何你一直在嘗試的代碼? – Eendje

+0

@Eendje請參閱上面的修改。 – Niklas

回答

2

該文檔對此並不十分清楚,但無法使用布爾散列或範圍鍵在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'}, 
    ]  
    ... 
) 

的通話將失敗的「啓用」範圍鍵式「S」的要求,「N」或'B'。

如果您想要在範圍鍵中有效地存儲布爾值,應該使用數字類型並分配0和1值,可以像您已經演示的那樣對其進行過濾。

如果您有一個不是散列或範圍鍵的布爾值,您可以使用FilterExpression而不是RangeKeyConditionExpression來過濾它,如FilterExpression documentation中所述。

+0

啊對了,我把rangeExpression和Swift中的filterExpression混淆了。所以這實際上工作正常 let scanExpression = AWSDynamoDBScanExpression() scanExpression.filterExpression =「disabled =:val」 scanExpression.expressionAttributeValues = [「:val」:false] – Niklas

相關問題