gpt4 book ai didi

ios - 为什么将排序键用作 filterExpression 时 AWSDynamoDBScanExpression 返回空值?

转载 作者:行者123 更新时间:2023-11-28 13:54:13 27 4
gpt4 key购买 nike

我有以下 DynamoDB 表:

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

“BoardId”是分区键,“DateTime”是排序键

我想获取“BoardId”=“1”且“DateTime”包含“2019”的条目。
我用了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 为 0。我希望在执行相同的扫描时得到相同的结果DynamoDB 网络控制台:

dynamodb console

我对 AWSDynamoDBScanExpression 的使用有什么问题?

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

  • 不设置filterExpression => OK,最多返回10个项目
  • #id = :id => OK,最多返回 10 个 BoardId=1 的项目
  • contains(#dt, :dt) => 没有错误但也返回空结果
  • scanExpression.indexName 设置为某个索引,其中“DateTime”不是排序键(例如,“BoardId”是分区键 并且“类型”是排序键) => OK,返回与网络控制台相同的正确项目

是否不允许使用排序键作为过滤表达式?

AWS SDK for iOS docs 中没有提到这一点或在 AWS Working with Scan docs (这里甚至声明“使用 Scan,您可以在过滤器表达式中指定任何属性——包括分区键和排序键属性”)

最佳答案

我会尝试从您的扫描参数中删除 scanExpression.limit = 10

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

所以可能发生的情况是扫描正在查看 10 个项目,然后应用过滤器,过滤器不匹配它们,并且您没有得到任何结果

关于ios - 为什么将排序键用作 filterExpression 时 AWSDynamoDBScanExpression 返回空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54101599/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com