У меня есть следующая таблица 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](https://i.stack.imgur.com/Lfrt8.jpg)
Что не так с моим использованием AWSDynamoDBScanExpression
?
Я пытался использовать другие конфигурации сканирования:
- не устанавливать
filterExpression
=> OK , возвращает до 10 элементов
#id = :id
=> OK , возвращает до 10 элементов с BoardId = 1
contains(#dt, :dt)
=> без ошибок, но также возвращает пустые результаты
- установить
scanExpression.indexName
для некоторого индекса, где «DateTime» не является ключом сортировки (например, «BoardId» является ключом раздела , а «Type» является ключ сортировки ) => OK , возвращает правильный элемент, аналогичный веб-консоли
Разрешено ли использовать ключ сортировки в качестве выражения фильтра?
В документации AWS SDK для iOS или в AWS Работа со документами сканирования об этом даже не говорится (здесь даже указано, что " With Scan, Вы можете указать любые атрибуты в выражении фильтра, включая атрибуты ключа раздела и ключа сортировки")