Как запросить данные базы данных childByAutoID? - PullRequest
2 голосов
/ 03 июня 2019

Можно запросить этот путь в только за один раз и упорядочить элементы по значению 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)
    }

})
}

1 Ответ

2 голосов
/ 03 июня 2019

Если вам известно значение locality первого элемента, это возможно с помощью queryStarting(atValue:childKey:):

let query = ref.child("media")
  .queryOrdered(byChild: "locality")
  .queryStarting(atValue: "City of London", childKey: "-LgSsaqYzevONPTk2447")
  .queryLimited(toLast: 50)

Таким образом, приведенное выше упорядочивает все дочерние узлы по их расположению,и затем начинает возвращать результаты с помощью locality = "City of London" и клавишей -LgSsaqYzevONPTk2447.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...