จะอัปเดตรายการล่าสุดจากแผนผัง Firebase-Database ได้อย่างไร

ฉันต้องการอัปเดต (หรือซิงโครไนซ์) รายการล่าสุดจากแผนผังในฐานข้อมูล Firebase ของฉัน

โครงสร้างมีลักษณะดังนี้:

ฉันต้องการสังเกตรายการล่าสุดเท่านั้น โดยไม่ดึงข้อมูลทั้งหมดเหมือนที่ 'EventTypeChildAdded' ทำ
อย่างไรก็ตาม ฉันต้องการสังเกตรายการล่าสุดจริงๆ ดังนั้นฉันจึงต้องการเรียกใช้ฟังก์ชันทุกครั้งที่มี 'ล่าสุด' ใหม่ รายการ ดังนั้นเมื่อมีการเพิ่มเด็กเข้าไป

ฉันพบโค้ดชิ้นนี้แล้ว

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

แต่ดูเหมือนว่าจะไม่สังเกตรายการล่าสุด


person j3141592653589793238    schedule 08.06.2018    source แหล่งที่มา


คำตอบ (1)


ฉันเดาว่าคุณมาผิดทาง childadded ทำสิ่งที่คุณต้องการอย่างแน่นอน ตรวจสอบเอกสารอีกครั้ง https://firebase.google.com/docs/database/admin/retrieve-data#child-added

เป็นครั้งแรกที่ childadded ดึงข้อมูลรายการทั้งหมด แต่จากนั้นจะมีเพียงรายการที่เพิ่งเพิ่มเข้าไปในรายการ

เพิ่มลูกแล้ว

โดยทั่วไปแล้วเหตุการณ์ child_added จะใช้เมื่อดึงรายการของรายการจากฐานข้อมูล ต่างจากค่าที่ส่งคืนเนื้อหาทั้งหมดของตำแหน่ง child_added จะถูกทริกเกอร์หนึ่งครั้งสำหรับรายการย่อยที่มีอยู่แต่ละรายการ และอีกครั้งทุกครั้งที่มีการเพิ่มรายการย่อยใหม่ในเส้นทางที่ระบุ การเรียกกลับเหตุการณ์จะถูกส่งผ่านสแน็ปช็อตที่มีข้อมูลของเด็กใหม่ เพื่อวัตถุประสงค์ในการสั่งซื้อ อาร์กิวเมนต์ที่สองที่มีคีย์ย่อยก่อนหน้าจะถูกส่งผ่านด้วย

แก้ไข: หากต้องการจำกัดคำค้นหาที่เพิ่มไว้ในรายการสุดท้าย:

ref.queryLimited(toLast: 1).observe(.childAdded) { (snapshot) in
// parse snapshot to get the last item
person ugur    schedule 08.06.2018
comment
ใช่ ฉันรู้ นั่นคือเหตุผลที่ฉันถามคำถามนี้ ฉันจะรับองค์ประกอบล่าสุดเท่านั้น (และอัปเดต) โดยไม่ได้รับข้อมูลทั้งหมดเพียงครั้งเดียวได้อย่างไร @uguboz - person j3141592653589793238; 08.06.2018
comment
แล้วทำไมคุณไม่ใส่ฟังก์ชั่นทริกเกอร์ของคุณไว้ใน childadded? ฉันไม่เข้าใจสิ่งที่คุณถาม - person ugur; 08.06.2018
comment
เนื่องจาก childAdded จะดึงข้อมูลทั้งหมดเพียงครั้งเดียว ฉันไม่ต้องการสิ่งนั้น ฉันต้องการรับรายการล่าสุดเท่านั้น ...child_added is triggered once for each existing child... - person j3141592653589793238; 08.06.2018
comment
คุณไม่สามารถจัดการกรณีเริ่มต้นด้วยการตั้งค่าสถานะได้หรือไม่? จากนั้นมันจะทำงานตามที่คุณคาดหวัง - person ugur; 08.06.2018
comment
มันจะได้ผล ฉันแค่ไม่ต้องการดึงข้อมูลทั้งหมดเพราะอาจมีค่อนข้างมาก ยังไงก็ตาม ฉันคิดว่าฉันต้องใช้ childAdded ขอบคุณ - person j3141592653589793238; 08.06.2018
comment
ฮ่าๆ โอเค ฉันเข้าใจแล้ว ถ้าอย่างนั้นคุณควรลอง ref.queryLimited(toLast: 1).observe(.childAdded) { (snapshot) ... แทนที่จะสังเกตเหตุการณ์เดียว - person ugur; 08.06.2018
comment
สำหรับจาวาสคริปต์ที่เทียบเท่ากับคำถามนี้ โปรดดูที่ stackoverflow.com/a/46448886/5923606 - person ugur; 08.06.2018
comment
ใช่แล้ว คุณเก่งมาก ขอบคุณมาก หากคุณสามารถเพิ่มสิ่งนี้ลงในคำตอบของคุณได้ ฉันจะทำเครื่องหมายว่าแก้ไขแล้ว - person j3141592653589793238; 10.06.2018
comment
สำหรับไอโอเอส? จะรู้ได้อย่างไร? - person Krishna kushwaha; 29.10.2018