如何提取DynamoDB表中的第一行?

时间:2018-04-27 01:05:23

标签: ios swift amazon-dynamodb aws-sdk

我第一次使用(AWS)DynamoDB,所以我的问题非常基本。

我已经设置了一个包含一个字段(theField)的表(myTable),我可以一次填充一条记录。

以下是我想要做的事情:进行查询以提取已排序表的第一个元素。我想这简直太难了。

这是我的代码,基于我在AWS文档中可以找到的内容以及网上的一些示例:

    let queryExpression = AWSDynamoDBQueryExpression()
    queryExpression.scanIndexForward = false
    queryExpression.limit = 1

    let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()
    dynamoDbObjectMapper.query(myTable.self, expression: queryExpression) {
       (output: AWSDynamoDBPaginatedOutput?, error: Error?) in
        if error != nil {
            print("The request failed. Error: \(String(describing: error))")
        }
        if output != nil {
            // Process the output.
        }
    }

当我运行此代码时,我收到以下错误消息:

The request failed. Error: Optional(Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=0 "(null)" 
UserInfo={__type=com.amazon.coral.validate#ValidationException, message=Either the KeyConditions or 
KeyConditionExpression parameter must be specified in the request.})

首先,这个KeyConditions或KeyConditionExpression业务是什么? 查询很清楚为什么我需要任何条件?

其次,我当然试图填补一些虚拟条件(根据我在其他帖子上找到的内容)来看看会发生什么,但它从未奏效。

有人能告诉我如何编写queryExpression来做我想做的事吗?

2 个答案:

答案 0 :(得分:2)

您没有查询条件。对于查询,您需要至少提供PartitionKey。尝试scan而不是查询。

答案 1 :(得分:1)

您无法从发电机组中提取第一项。不适用于扫描或查询。您必须完全扫描表或使用createdAt作为hashKey / sortKey

创建一个GSI。