【问题标题】:DynamoDb begins_with Swift 5 issueDynamoDb begin_with Swift 5 问题
【发布时间】:2020-05-27 19:36:17
【问题描述】:

我一直在尝试使用 begin_with 选项从 Dynamodb 获取访问列表,但似乎无法理解为什么在 Xcode/swift 5 中运行时找不到结果。

我可以在节点工作台和 AWS 控制台上运行查询。我有相同的代码用于简单查询。

getUser() 函数正在工作

   func getUser() {

       // 1) Configure the query
       let queryExpression = AWSDynamoDBQueryExpression()
        queryExpression.keyConditionExpression = "#UserID = :UserID AND #UserDataType = :UserDataType"
       queryExpression.expressionAttributeNames = [
           "#UserID": "UserID",
           "#UserDataType": "UserDataType"
       ]
       queryExpression.expressionAttributeValues = [
           ":UserID" : "1001",
           ":UserDataType" : "User"
       ]
       // 2) Make the query
       let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()
       dynamoDbObjectMapper.query(HiViz.self, expression: queryExpression) { (output: AWSDynamoDBPaginatedOutput?, error: Error?) in
           if error != nil {
               print("The request failed. Error: \(String(describing: error))")
           }
           if output != nil {
               for books in output!.items {
                   let booksItem = books as? HiViz
                print("\(booksItem!.Visitorid!)")
               }
           }
       }
    }

queryHiVizTable 包含begins_with,我不知道如何解决没有返回结果的问题。

   func queryHiVizTable() {

       // 1) Configure the query
       let queryExpression = AWSDynamoDBQueryExpression()
queryExpression.keyConditionExpression = "#UserID = :UserID AND begins_with(#UserDataType, :UserDataType)"

        queryExpression.expressionAttributeNames = [
           "#UserID": "UserID",
           "#UserDataType": "UserDataType"
       ]

       queryExpression.expressionAttributeValues = [
           ":UserID" : "1001",
           ":UserDataType" : "V)"
       ]

       // 2) Make the query
       let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()
       dynamoDbObjectMapper.query(HiViz.self, expression: queryExpression) { (output: AWSDynamoDBPaginatedOutput?, error: Error?) in
        print(queryExpression)
        if error != nil {
               print("The request failed. Error: \(String(describing: error))")
           }
           if output != nil {
                for books in output!.items {
                                 let booksItem = books as? HiViz
                    print("\(booksItem!.Visitorid!)")
               }
           }
       }
    }

AWS 新手,非常感谢您的帮助。

谢谢

戴夫

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb swift5


    【解决方案1】:

    (仅供参考 Swift 5 Xcode 11.5)

    事实证明,经过我昨天在今天早上发布这个问题之前所做的所有测试之后,我已经非常接近正确地编写代码了。

    在下面的代码中,我在 userdatatype 中有一个 ) 的错字,这破坏了 begin_with。它应该只是 V 而不是 v)

    queryExpression.expressionAttributeValues = [
               ":UserID" : "1001",
               ":UserDataType" : "V)"
           ]
    

    1001 的数据然后返回不同的错误

    无法识别的选择器发送到实例

    这是由于数据库中的一行数据是 json。

    当我使用不同的用户 ID 进行测试时,它按预期工作。

    如果您使用下面我的工作代码作为示例,同时按照链接中的 AWS 指南进行操作,您应该可以让 begin_with 工作。

    https://docs.aws.amazon.com/aws-mobile/latest/developerguide/how-to-nosql-integrate-an-existing-table.html

     func queryHiVizTable() {
    
               // 1) Configure the query
               let queryExpression = AWSDynamoDBQueryExpression()
        queryExpression.keyConditionExpression = "#UserID = :UserID AND begins_with(#UserDataType, :UserDataType)"
                queryExpression.expressionAttributeNames = [
                   "#UserID": "UserID",
                   "#UserDataType": "UserDataType"
               ]
               queryExpression.expressionAttributeValues = [
                   ":UserID" : "1001",
                   ":UserDataType" : "V"
               ]
               // 2) Make the query
               let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()
               dynamoDbObjectMapper.query(HiViz.self, expression: queryExpression) { (output: AWSDynamoDBPaginatedOutput?, error: Error?) in
                print(queryExpression)
                if error != nil {
                       print("The request failed. Error: \(String(describing: error))")
                   }
                   if output != nil {
                        for books in output!.items {
                                         let booksItem = books as? HiViz
                            print("---utututut---\(booksItem!.VisitorID!)")
                       }
                   }
               }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 2017-01-28
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      相关资源
      最近更新 更多