iOS - Kueri Filter Firebase

Saya mendapat simpul skor di Firebase:

Dan di bawah simpul skor, struktur data saya adalah sebagai:

{
"jjTO29ziQ2SjrH5PFzY7ZMpSgjq1-Kak6FCyGtdy_kcEPd4K" =     {
    jjTO29ziQ2SjrH5PFzY7ZMpSgjq1 = "-Kak6FCyGtdy_kcEPd4K";
    score = 5;
};
"jjTO29ziQ2SjrH5PFzY7ZMpSgjq1-KbE_pgfUsukOm4uW0bx" =     {
    jjTO29ziQ2SjrH5PFzY7ZMpSgjq1 = "-KbE_pgfUsukOm4uW0bx";
    score = 4;
};

Pertanyaan: Dapatkah saya memfilter data berdasarkan skor?

Saya mencoba melakukan:

FIRDatabase.database().reference().child("scores").queryOrdered(byChild: "score").observeSingleEvent(of: .value, with: { (snapshot) in

        debugPrint(snapshot.value ?? "nil")

    })

Tapi tidak bisa mendapatkan hasilnya?

Gambar 1


person user3804063    schedule 25.01.2017    source sumber
comment
Anda dapat memfilter berdasarkan data dengan orderByChild tetapi menurut saya masalah Anda adalah karena Anda belum memasukkan node terkait yang memiliki skor di dalamnya. Karena Anda memasukkan skor di awal sebagai seorang anak, tetapi pertama-tama Anda harus memasukkan setiap id Anda.   -  person Mago Nicolas Palacios    schedule 25.01.2017
comment
Apa masalahnya? Apakah debugPrint dipanggil?   -  person Frank van Puffelen    schedule 25.01.2017
comment
@MagoNicolasPalacios: Node saya sudah diatur seperti pada gambar 1? Bisakah Anda menyarankannya?   -  person user3804063    schedule 25.01.2017
comment
@FrankvanPuffelen: ya, pencetakan debug dipanggil tetapi datanya tidak diurutkan berdasarkan skor   -  person user3804063    schedule 25.01.2017
comment
Tapi apakah Anda mengerti apa yang saya katakan? Anda memasukkan skor dan kemudian memfilter berdasarkan skor, dan skor tidak memiliki anak langsung bernama skor, ia memiliki 2 anak berbeda yang di dalamnya terdapat nilai yang disebut skor.   -  person Mago Nicolas Palacios    schedule 25.01.2017
comment
@MagoNicolasPalacios: ya Anda benar, saya tidak mendapat skor anak langsung. Saya harus memfilter. Bisakah saya mencapai ini?   -  person user3804063    schedule 25.01.2017
comment
Kamu bisa! Menurut saya jawaban di bawah ini benar. (Frank van Puffelen)   -  person Mago Nicolas Palacios    schedule 25.01.2017


Jawaban (1)


Saat menjalankan kueri terhadap Firebase, Anda mendapatkan FIRDataSnapshot yang berisi tiga informasi untuk setiap hasil:

  • kuncinya
  • nilainya
  • posisinya relatif terhadap node lain

Saat Anda memanggil snapshot.value, snapshot diubah menjadi Kamus. Sayangnya kamus tersebut hanya dapat menampung pasangan nilai kunci, sehingga Anda kehilangan informasi tentang posisi node. Jadi, meskipun data dalam snapshot sudah diurutkan dengan benar, Anda membuang informasi tersebut.

Solusinya adalah dengan menggunakan properti children bawaan FIRDataSnapshots untuk mengulang node anak dalam urutan yang benar. Dokumentasi Firebase tentang kueri memiliki contoh cara melakukan ini lakukan itu:

_commentsRef.observeEventType(.Value, withBlock: { snapshot in
  for child in snapshot.children {
    ...
  }
})
person Frank van Puffelen    schedule 25.01.2017