是否可以過濾DynamoDB查詢在AWS 2版中使用非關鍵屬性?亞馬遜說,他們可以做到這一點:http://amzn.to/1FVgQ9B。但他們是否也提供API?我發現AWSDynamoDBQueryExpression,但我認爲它只允許過濾範圍鍵(沒有足夠的文檔)。我在iOS和AWS版本2中尋找適當的API。謝謝!查詢DynamoDB非關鍵屬性
回答
我回答我的問題。這是我對AWS支持論壇發佈,以及:
不能與高層次的API做到這一點 - AWSDynamoDBObjectMapper。當使用AWSDynamoDBObjectMapper,您需要提供一個AWSDynamoDBQueryExpression對象的查詢方法來指定查詢條件。 AWSDynamoDBQueryExpression不提供您在非關鍵屬性上設置過濾器(條件)的選項。我想知道爲什麼這不被支持!但是,AWSDynamoDBScanExpression允許您在使用掃描方法時指定非關鍵屬性的條件。但是當你實際上查詢的時候你不想掃描。
幸運的是,你可以通過直接調用查詢上AWSDynamoDB提供AWSDynamoDBQueryInput它可以讓你指定了很多低級參數使用低級別的API做到這一點。 AWSDynamoDBQueryInput允許您使用queryFilter或filterExpression指定非關鍵屬性上的過濾條件。 queryFilter已棄用,建議使用filterExpression。 這裏有兩個文件,幫助我摸不着頭腦:
http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html http://docs.aws.amazon.com/AWSiOSSDK/latest/Classes/AWSDynamoDBQueryInput.html
下面是迅速的代碼示例。在此代碼中,我基於「已批准」字段進行篩選,該字段是非關鍵屬性。 recId是主鍵:
func getApprovedRecords(recId: Int) {
let dynamoDB = AWSDynamoDB.defaultDynamoDB()
var startKey = nil
var queryInput = AWSDynamoDBQueryInput()
queryInput.tableName = TABLE_NAME
queryInput.limit = QUERY_SIZE
queryInput.exclusiveStartKey = startKey
var recIdValue = AWSDynamoDBAttributeValue()
recIdValue.N = String(recId)
var recIdCondition = AWSDynamoDBCondition()
recIdCondition.comparisonOperator = AWSDynamoDBComparisonOperator.EQ
recIdCondition.attributeValueList = [recIdValue]
queryInput.keyConditions = [ "recId"\" : recIdCondition]
var oneValue = AWSDynamoDBAttributeValue()
oneValue.N = "1"
queryInput.expressionAttributeValues = [ ":one" : oneValue ]
queryInput.filterExpression = "approved = :one"
dynamoDB.query(queryInput).continueWithBlock { (task: BFTask!) -> AnyObject! in
if ((task.error) != nil) {
NSLog("The request failed. Error: \(task.error)")
}
if ((task.exception) != nil) {
NSLog("The request failed. Exception: \(task.exception)")
}
if ((task.result) != nil) {
NSLog("The request succeeded.")
let results = task.result as! AWSDynamoDBQueryOutput
for r in results.items {
// do whatever with the result
}
}
return nil
}
}
您能否提供一個示例代碼以及您如何實現此功能? – iEngineer
我在答案中添加了代碼。我希望它有幫助! – user2732722
- 1. 關鍵非屬性查詢
- 2. DynamoDB:查詢非關鍵屬性的全局二級索引
- 3. DynamoDB:掃描多個非關鍵屬性
- 4. DynamoDB:通過比較查詢非鍵值
- 5. DynamoDB避免重複的非關鍵屬性
- 6. 加入非關鍵屬性
- 7. DynamoDB在查詢字符串屬性
- 8. 如何高效查詢DynamoDb StringSet屬性
- 9. AWS dynamodb查詢錯誤:查詢關鍵條件不支持
- 10. 查詢dynamoDB與關鍵條件「GE」在哈希鍵
- 11. Neo4j查詢關係屬性
- 12. 查詢與非散列鍵字段dynamoDB(與boto/python)
- 13. Laravel 5.1查詢有關關係的外鍵的屬性
- 14. DynamoDB scan()ResultSet沒有屬性鍵
- 15. 主排序鍵DynamoDB屬性表達式
- 16. 更新非關鍵列查詢Pheonix JDBC
- 17. Rails 3根據非關鍵屬性查找記錄
- 18. DynamoDb「查詢鍵條件不支持」
- 19. 多個散列鍵上的DynamoDB查詢
- 20. dynamodb:與哈希鍵查詢只
- 21. 查詢沒有主鍵的DynamoDB
- 22. 查詢的範圍在dynamodb主鍵
- 23. MySQL查詢:查找相關屬性
- 24. 如何在dynamodb查詢中使用保留關鍵字'year'
- 25. 使用DynamoDB和PHP查詢照片中的關鍵字
- 26. DynamoDB:在一系列非連續範圍鍵中查詢範圍鍵
- 27. AWS DynamoDB查詢與關鍵條件表達式得到了一個錯誤:查詢關鍵條件不支持
- 28. 查詢DynamoDB
- 29. 查詢DynamoDB表
- 30. 帶關鍵屬性
爲了['Query'](http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html),你必須** **提供hashKey。然後,您可以使用任何其他屬性的[過濾器表達式[(http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#FilteringResults)來過濾下來的結果。 – mkobit
我還沒有找到在iOS中執行此操作的API。看起來沒有。我知道,理論上他們在文件中說你發送的文件是可能的。請注意,該文檔是獨立於平臺的。 – user2732722