代码之家  ›  专栏  ›  技术社区  ›  Gino Mempin Brijesh Sondarva

当使用排序键作为filterExpression时,为什么AWSDynamodBCanExpression返回空?

  •  0
  • Gino Mempin Brijesh Sondarva  · 技术社区  · 7 年前

    BoardId   |  DateTime          |  Data  |  Type
    -------------------------------------------------
    1         |  20180424T123508Z  |  68.1  |  U
    1         |  20181026T143233Z  |  38.2  |  T
    1         |  20190108T120150Z  |  38.1  |  T
    2         |  20180425T092311Z  |  63.4  |  U
    

    分区密钥 “DateTime”是 排序键 .


    我曾经 AWSDynamoDBObjectMapper#scan 要执行此操作,请使用以下代码:

        let dbObjMapper = AWSDynamoDBObjectMapper.default()
    
        let scanExpression = AWSDynamoDBScanExpression()
        scanExpression.limit = 10
        scanExpression.filterExpression = "#id = :id AND contains(#dt, :dt)"
        scanExpression.expressionAttributeNames = [
            "#id" : "BoardId",
            "#dt" : "DateTime"
        ]
        scanExpression.expressionAttributeValues = [
            ":id" : "1",
            ":dt" : "2019"
        ]
    
        dbObjMapper
            .scan(Event.self, expression: scanExpression)
            .continueWith(block: {
                (task: AWSTask<AWSDynamoDBPaginatedOutput>!) -> Any? in
                if let error = task.error as NSError? {
                    print("The request failed. Error: \(error)")
                } else if let paginatedOutput = task.result {
                    print("The request was successful.")
                    print(paginatedOutput.items.count)
                    for event in paginatedOutput.items as! [Event] {
                        print(event)
                    }
                }
                return ()
        })
    

    但是我得到了一个空的结果。没有错误(“ 请求成功。 )但打印 paginatedOutput.items.count

    dynamodb console

    我的英语怎么了 AWSDynamoDBScanExpression

    我尝试使用其他扫描配置:

    • filterExpression 好啊 ,最多可返回10项
    • #id = :id 好啊 ,返回最多10个BoardId为1的项目
    • contains(#dt, :dt) =>没有错误,但也返回空结果
    • 设定 scanExpression.indexName 到某个索引,其中“DateTime” 排序键(例如“BoardId”)是 分区密钥 排序键 )=> 好啊

    报纸上没有提到这一点 AWS SDK for iOS docs 或者在 AWS Working with Scan docs 使用Scan,您可以在筛选器表达式中指定任何属性,包括分区键和排序键属性 ")

    1 回复  |  直到 7 年前
        1
  •  1
  •   Brian Winant    7 年前

    我会试着把它去掉 scanExpression.limit = 10

    从…起 https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html#DDB-Scan-request-Limit :“要评估的最大项目数(不一定是匹配的项目数)。”