Можно запросить этот путь в только за один раз и упорядочить элементы по значению locality
(например, в Лондоне), но получить только элементы, которые начинаются / заканчиваются в определенном childByAutoID
?
Причина - когда я прокручиваю вниз в табличном представлении, я хочу получить из базы данных более старые элементы, упорядоченные по определенной области, например, Лондон и старше, чем oldestKey
, который является ключом элемента мультимедиа ,
Первая партия товаров первоначально загружается с использованием метода .childAdded
.
Данные:
media
-LgSsaqYzevONPTk2447 // <- childByAutoID
caption: "12"
locality: "City of London"
mediaUID: "-LgSsaqYzevONPTk2447"
-LgSsZnpSNLJwZBNgXGJ
caption: "15"
locality: "New York"
mediaUID: "-LgSsZnpSNLJwZBNgXGJ"
код
class func observeNewMediaSingleTime(_ oldestKey: String,_
userLocality: String, _ completion: @escaping ([Media], String?) -> Void) {
let ref = Database.database().reference()
let query = ref.child("media").queryOrdered(byChild: userLocality).queryStarting(atValue: oldestKey).queryLimited(toLast: 50)
ref.observeSingleEvent(of: .value, with: { snapshot in
guard snapshot.exists() else {
completion([],nil)
return}
let firstItem = snapshot.children.allObjects.first as! DataSnapshot
var arrayOfMedia = [Media]()
var count = 0
let enumerator = snapshot.children
while let mediaItem = enumerator.nextObject() as? DataSnapshot {
let media = Media(dictionary: mediaItem.value as! [String:Any])
print("media.locality is \(media.locality)")
//check if new media has same key as oldest post downloaded in previously
if media.mediaUID != oldestKey{
count += 1
arrayOfMedia.append(media)
}
}//end of while
arrayOfMedia.reverse()
if count == arrayOfMedia.count {
let updatedOldestKey = firstItem.key
completion(arrayOfMedia, updatedOldestKey)
}
})
}