Bagaimana cara memperbarui entri terbaru dari pohon Firebase-Database?

Saya ingin memperbarui (atau menyinkronkan) entri terbaru dari pohon di Firebase-Database saya.

Strukturnya terlihat seperti ini:

Saya ingin mengamati entri terbaru saja, tanpa mengambil semua entri seperti yang dilakukan 'EventTypeChildAdded'.
Namun, saya benar-benar ingin mengamati entri terbaru, jadi saya ingin memanggil fungsi setiap kali ada 'terbaru' baru entri, jadi ketika seorang anak ditambahkan.

Saya sudah menemukan potongan kode ini.

(DatabaseRef).queryOrderedByKey().queryLimitedToLast(1).observeSingleEventOfType

Namun hal ini sepertinya tidak memperhatikan entri terbaru.


person j3141592653589793238    schedule 08.06.2018    source sumber


Jawaban (1)


Saya kira Anda berada di jalan yang salah. childadded melakukan apa yang Anda butuhkan. Periksa kembali dokumen tersebut. https://firebase.google.com/docs/database/admin/retrieve-data#child-added

Untuk pertama kalinya childadded mengambil semua daftar tetapi kemudian hanya item yang ditambahkan ke daftar.

Anak Ditambahkan

Acara child_added biasanya digunakan saat mengambil daftar item dari database. Berbeda dengan nilai yang mengembalikan seluruh konten lokasi, child_added dipicu satu kali untuk setiap turunan yang ada dan terpicu lagi setiap kali turunan baru ditambahkan ke jalur yang ditentukan. Callback kejadian meneruskan snapshot yang berisi data anak baru. Untuk tujuan pengurutan, argumen kedua juga dilewatkan yang berisi kunci dari anak sebelumnya.

EDIT: Untuk membatasi kueri yang ditambahkan anak ke item terakhir:

ref.queryLimited(toLast: 1).observe(.childAdded) { (snapshot) in
// parse snapshot to get the last item
person ugur    schedule 08.06.2018
comment
Ya, saya tahu itu, itulah sebabnya saya menanyakan pertanyaan ini. Bagaimana saya bisa mendapatkan elemen terbaru saja (dan memperbaruinya), tanpa mendapatkan semua data satu kali? @uguboz - person j3141592653589793238; 08.06.2018
comment
Jadi mengapa Anda tidak memasukkan fungsi pemicu Anda ke dalam childadded? aku tidak mengerti apa yang kamu minta - person ugur; 08.06.2018
comment
Karena childAdded juga akan mengambil semua data satu kali. Saya tidak menginginkan itu. Saya hanya ingin mendapatkan entri terbaru. ...child_added is triggered once for each existing child... - person j3141592653589793238; 08.06.2018
comment
mungkin tidak bisakah kamu menangani kasus awal dengan sebuah bendera? Maka itu akan berfungsi seperti yang Anda harapkan - person ugur; 08.06.2018
comment
Ini akan berhasil, saya hanya tidak ingin mengambil semua entri karena mungkin ada cukup banyak. Bagaimanapun, saya rasa saya harus menggunakan childAdded. Terima kasih - person j3141592653589793238; 08.06.2018
comment
aha oke aku mengerti sekarang. maka kamu harus mencoba ref.queryLimited(toLast: 1).observe(.childAdded) { (snapshot) ... daripada mengamati satu peristiwa - person ugur; 08.06.2018
comment
untuk javascript yang setara dengan pertanyaan ini, lihat stackoverflow.com/a/46448886/5923606 - person ugur; 08.06.2018
comment
Ya, kamu luar biasa, terima kasih banyak. Jika Anda dapat menambahkan ini ke jawaban Anda, saya akan menandainya sebagai terselesaikan. - person j3141592653589793238; 10.06.2018
comment
Untuk iOS? bagaimana cara mengetahuinya? - person Krishna kushwaha; 29.10.2018