Запрос к серверу AWS DynamoDB с помощью только клавиши диапазона в быстром - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь использовать функцию запроса на сервере AWS DynamodB и вернуть значение индекса, используя только его ключ диапазона.По сути, я хочу, чтобы пользователь мог найти других пользователей, используя только этот ключ диапазона.Моя программа генерирует случайный код от одного пользователя, и предполагается, что другой пользователь сможет найти этого пользователя, не зная его идентификатора и просто зная его случайный код.В данный момент, когда я запрашиваю, он возвращает только пользователей, совпадающих с идентификатором пользователя, который запрашивает устройство, поэтому я пытаюсь запросить только случайный код (который является ключом диапазона).Вот мой код:

let queryExpression = AWSDynamoDBQueryExpression()
        queryExpression.keyConditionExpression = "#randomCode = :randomCode AND #userId = :userId"

        queryExpression.expressionAttributeNames = [
            "#userId": "userId",
            "#randomCode": "randomCode"
        ]
        queryExpression.expressionAttributeValues = [
            ":randomCode": passedCode,
            ":userId": AWSIdentityManager.default().identityId
        ]


        // 2) Make the query
        dynamoDbObjectMapper.query(Timestamps.self, expression: queryExpression) { (output: AWSDynamoDBPaginatedOutput?, error: Error?) in
            if error != nil {
                print("The request failed. Error: \(String(describing: error))")
            }
            if output == nil {
                print("Nill output")
            }
            if output != nil {
                if output!.items.count == 0 {
                    print("code not found")
                    DispatchQueue.main.async {
                        let animation = CABasicAnimation(keyPath: "position")
                        animation.duration = 0.07
                        animation.repeatCount = 4
                        animation.autoreverses = true
                        animation.fromValue = NSValue(cgPoint: CGPoint(x: self.codeTextField.center.x - 10, y: self.codeTextField.center.y))
                        animation.toValue = NSValue(cgPoint: CGPoint(x: self.codeTextField.center.x + 10, y: self.codeTextField.center.y))
                        self.codeTextField.layer.add(animation, forKey: "position")
                    }
                }
                else {
                    for timestamps in output!.items {
                        let timestampItem = timestamps as? Timestamps
                        //print(timestampItem?._songURI as! String)
                        let currentSong = timestampItem?._songURI as! String
                        let currentTimestamp = timestampItem?._timestamp
                        let currentTimestampDouble = currentTimestamp as! Double
                        //print(currentTimestampDouble)
                        self.playSync(currentSong: currentSong, currentTimestamp: currentTimestampDouble)
                    }

                }

            }
        }

Если я передаю ключ хэша как nil или не передаю его вообще, aws возвращает ошибку, что запрос не содержал ключ хэша.Как запросить ключ хеша, которого я не знаю, или как просто запросить ключ диапазона?

Спасибо за чтение!

1 Ответ

0 голосов
/ 12 мая 2018

Вы не можете выполнить этот запрос, используя текущий индекс. Вам необходимо создать Глобальный вторичный индекс для таблицы с randomCode в качестве первичного ключа этого индекса. Затем вы можете выполнить запрос только randomCode, указав, что в запросе используется глобальный вторичный индекс.

...