ได้รับการอ้างอิงฐานข้อมูล
ในการอ่านหรือเขียนข้อมูลจากฐานข้อมูลที่คุณต้องการตัวอย่างของ DatabaseReference
:
DatabaseReference ref = FirebaseDatabase.instance.ref();
การอ่านและการเขียนรายการ
ผนวกไปยังรายการของข้อมูล
ใช้ การ push()
วิธีการเพื่อให้ข้อมูลที่ผนวกเข้าไปในรายการในการใช้งานแบบ multiuser push()
วิธีการสร้างคีย์ที่ไม่ซ้ำกันทุกครั้งที่มีเด็กใหม่จะถูกเพิ่มอ้างอิง Firebase ระบุ โดยใช้ปุ่มสร้างขึ้นโดยอัตโนมัติเหล่านี้สำหรับแต่ละองค์ประกอบใหม่ในรายการลูกค้าหลายสามารถเพิ่มเด็กไปยังสถานที่เดียวกันในเวลาเดียวกันโดยไม่ต้องเขียนความขัดแย้ง กุญแจสำคัญที่ไม่ซ้ำกันสร้างขึ้นโดย การ push()
จะขึ้นอยู่กับการประทับเวลาเพื่อให้รายการมีคำสั่งตามลำดับโดยอัตโนมัติ
คุณสามารถใช้การอ้างอิงถึงข้อมูลใหม่ส่งกลับโดย การ push()
วิธีการที่จะได้รับค่าของคีย์หรือชุดข้อมูลที่สร้างขึ้นโดยอัตโนมัติของเด็กสำหรับเด็ก .key
ทรัพย์สินของ การ push()
อ้างอิงมีคีย์สร้างขึ้นโดยอัตโนมัติ
คุณสามารถใช้ปุ่มสร้างขึ้นโดยอัตโนมัติเหล่านี้เพื่อลดความซับซ้อนของแฟบโครงสร้างข้อมูลของคุณ สำหรับข้อมูลเพิ่มเติมโปรดดู ที่ ตัวอย่างเช่นพัดลมข้อมูล
ยกตัวอย่างเช่น การ push()
สามารถนำมาใช้เพื่อเพิ่มการโพสต์ใหม่ในรายการโพสต์ในการประยุกต์ใช้ทางสังคม:
DatabaseReference postListRef = FirebaseDatabase.instance.ref("posts");
DatabaseReference newPostRef = postListRef.push();
newPostRef.set({
// ...
});
ฟังสำหรับกิจกรรมเด็ก
เหตุการณ์ที่เด็กจะมีการหารือในการตอบสนองต่อการดำเนินงานเฉพาะที่เกิดขึ้นกับเด็กของโหนดจากการดำเนินการดังกล่าวที่เป็นเด็กใหม่ที่เพิ่มขึ้นผ่าน การ push()
วิธีการหรือเด็กที่ถูกปรับปรุงผ่าน การ update()
วิธีการ
เหตุการณ์ | การใช้งานทั่วไป |
---|---|
onChildAdded | ดึงรายชื่อของรายการหรือฟังสำหรับข้อมูลเพิ่มเติมไปรายชื่อของรายการ เหตุการณ์นี้จะถูกเรียกครั้งเดียวสำหรับเด็กแต่ละคนที่มีอยู่และจากนั้นอีกครั้งทุกครั้งที่มีเด็กใหม่จะถูกเพิ่มไปยังเส้นทางที่ระบุ ฟังถูกส่งผ่านภาพที่มีข้อมูลเด็กใหม่ |
onChildChanged | ฟังเพื่อให้การเปลี่ยนแปลงรายการในรายการ เหตุการณ์นี้จะถูกเรียกเวลาใดโหนดเด็กที่มีการแก้ไข ซึ่งรวมถึงการแก้ไขใด ๆ ที่ลูกหลานของโหนดเด็ก ภาพรวมส่งผ่านไปยังผู้ฟังเหตุการณ์ประกอบด้วยข้อมูลที่อัปเดตสำหรับเด็ก |
onChildRemoved | ฟังสำหรับรายการที่ถูกลบออกจากรายการ เหตุการณ์นี้จะถูกเรียกเมื่อเด็กทันที removed.The ภาพรวมส่งผ่านไปยังบล็อกเรียกกลับมีข้อมูลสำหรับเด็กที่ถูกนำออก |
onChildMoved | ฟังเพื่อให้การเปลี่ยนแปลงลำดับของรายการในรายการสั่งซื้อ เหตุการณ์ onChildMoved มักจะปฏิบัติตามเหตุการณ์ onChildChanged ที่ทำให้เกิดการสั่งซื้อของรายการมีการเปลี่ยนแปลง (ขึ้นอยู่กับปัจจุบันของคุณสั่งซื้อด้วยวิธีการ) |
แต่ละร่วมกันเหล่านี้จะเป็นประโยชน์สำหรับการฟังการเปลี่ยนแปลงไปยังโหนดที่เฉพาะเจาะจงในฐานข้อมูล สำหรับตัวอย่างเช่นแอปบล็อกสังคมอาจจะใช้วิธีการเหล่านี้ร่วมกันเพื่อตรวจสอบกิจกรรมในความคิดเห็นของโพสต์ที่แสดงด้านล่าง:
final commentsRef = FirebaseDatabase.instance.ref("post-comments/$postId");
commentsRef.onChildAdded.listen((event) {
// A new comment has been added, so add it to the displayed list.
});
commentsRef.onChildChanged.listen((event) {
// A comment has changed; use the key to determine if we are displaying this
// comment and if so displayed the changed comment.
});
commentsRef.onChildRemoved.listen((event) {
// A comment has been removed; use the key to determine if we are displaying
// this comment and if so remove it.
});
ฟังสำหรับเหตุการณ์ที่คุ้มค่า
ในขณะที่ฟังสำหรับการจัดกิจกรรมของเด็กเป็นวิธีที่แนะนำในการอ่านรายชื่อของข้อมูลที่มีสถานการณ์ฟังสำหรับเหตุการณ์ที่คุ้มค่าในการอ้างอิงรายการจะเป็นประโยชน์
แนบ value
ฟังไปยังรายการของข้อมูลจะกลับรายชื่อทั้งหมดของข้อมูลเป็นภาพเดียวที่คุณสามารถแล้วห่วงกับเด็กแต่ละคนเข้าถึง
แม้ในขณะที่มีเพียงการแข่งขันเดียวสำหรับการสอบถามภาพรวมยังคงเป็นรายการ; มันก็มีรายการเดียว ในการเข้าถึงรายการที่คุณจะต้องห่วงมากกว่าผล:
myTopPostsQuery.onValue.listen((event) {
for (final child in event.snapshot.children) {
// Handle the post.
}
}, onError: (error) {
// Error.
});
รูปแบบนี้จะมีประโยชน์เมื่อคุณต้องการจะดึงเด็กทั้งหมดของรายการในการทำงานครั้งเดียวมากกว่าฟังสำหรับเด็กเพิ่มเหตุการณ์เพิ่มเติม
เรียงลำดับและกรองข้อมูล
คุณสามารถใช้ Query
ระดับเพื่อดึงข้อมูลเรียงตามคีย์โดยค่าหรือโดยมูลค่าของเด็ก นอกจากนี้คุณยังสามารถกรองผลการเรียงลำดับไปยังหมายเลขเฉพาะของผลหรือช่วงของคีย์หรือค่า
เรียงลำดับข้อมูล
เพื่อดึงข้อมูลที่เรียงลำดับเริ่มต้นโดยการระบุหนึ่งในการสั่งซื้อด้วยวิธีการเพื่อตรวจสอบว่าผลจะได้รับคำสั่ง:
วิธี | การใช้ |
---|---|
orderByChild() | ผลการสั่งซื้อด้วยค่าของคีย์เด็กที่ระบุหรือเส้นทางเด็กที่ซ้อนกัน | orderByKey() | ผลการสั่งซื้อโดยคีย์เด็ก |
orderByValue() | ผลการสั่งซื้อด้วยค่าเด็ก |
คุณสามารถใช้ หนึ่ง คำสั่งซื้อโดยวิธีการในเวลา โทรสั่งซื้อโดยวิธีการหลายครั้งในแบบสอบถามเดียวกันโยนข้อผิดพลาด
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการที่คุณสามารถเรียกดูรายการโพสต์ด้านบนของผู้ใช้เรียงตามนับดาวของพวกเขา:
final myUserId = FirebaseAuth.instance.currentUser?.uid;
final topUserPostsRef = FirebaseDatabase.instance
.ref("user-posts/$myUserId")
.orderByChild("starCount");
นี้กำหนดแบบสอบถามที่เมื่อรวมกับที่ ฟังเด็ก ประสานลูกค้าที่มีการโพสต์ของผู้ใช้จากเส้นทางที่อยู่ในฐานข้อมูลตาม ID ผู้ใช้ของพวกเขาได้รับคำสั่งจากจำนวนของดาวแต่ละโพสต์ได้รับ เทคนิคการใช้รหัสเป็นคีย์ดัชนีนี้จะเรียกว่าแฟนข้อมูลออกคุณสามารถอ่านข้อมูลเพิ่มเติมเกี่ยวกับมันใน โครงสร้างฐานข้อมูลของคุณ
โทรไป orderByChild()
วิธีการระบุที่สำคัญเด็กที่จะสั่งซื้อผลการค้นหาใน ในกรณีนี้โพสต์จะเรียงตามมูลค่าของ "starCount"
เด็ก คำสั่งนอกจากนี้ยังสามารถสั่งซื้อได้โดยเด็กที่ซ้อนกันในกรณีที่คุณมีข้อมูลที่มีลักษณะเช่นนี้
"posts": {
"ts-functions": {
"metrics": {
"views" : 1200000,
"likes" : 251000,
"shares": 1200,
},
"title" : "Why you should use TypeScript for writing Cloud Functions",
"author": "Doug",
},
"android-arch-3": {
"metrics": {
"views" : 900000,
"likes" : 117000,
"shares": 144,
},
"title" : "Using Android Architecture Components with Firebase Realtime Database (Part 3)",
"author": "Doug",
}
},
ในกรณีนี้เราสามารถสั่งซื้อองค์ประกอบของรายการของเราโดยค่าซ้อนกันภายใต้ metrics
ที่สำคัญโดยการระบุเส้นทางสัมพันธ์กับเด็กที่ซ้อนกันของเรา orderByChild()
โทร
final mostViewedPosts =
FirebaseDatabase.instance.ref('posts').orderByChild('metrics/views');
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการอื่น ๆ ชนิดข้อมูลที่มีการสั่งซื้อโปรดดู ที่ วิธีการค้นหาข้อมูลได้รับคำสั่ง
การกรองข้อมูล
การกรองข้อมูลคุณสามารถรวมใด ๆ ของวงเงินหรือช่วงที่วิธีการที่มีคำสั่งซื้อโดยวิธีการเมื่อสร้างแบบสอบถาม
วิธี | การใช้ |
---|---|
limitToFirst() | ชุดจำนวนสูงสุดของรายการที่จะกลับมาจากจุดเริ่มต้นของรายการสั่งซื้อของผล |
limitToLast() | ชุดจำนวนสูงสุดของรายการที่จะกลับมาจากการสิ้นสุดของรายการสั่งซื้อของผล |
startAt() | รายการย้อนกลับมากกว่าหรือเท่ากับคีย์ที่ระบุหรือค่าขึ้นอยู่กับการสั่งซื้อด้วยวิธีการได้รับการแต่งตั้ง |
startAfter() | รายการย้อนกลับมากกว่าคีย์ที่ระบุหรือค่าขึ้นอยู่กับการสั่งซื้อด้วยวิธีการได้รับการแต่งตั้ง |
endAt() | รายการย้อนกลับน้อยกว่าหรือเท่ากับคีย์ที่ระบุหรือค่าขึ้นอยู่กับการสั่งซื้อด้วยวิธีการได้รับการแต่งตั้ง |
endBefore() | รายการย้อนกลับน้อยกว่าที่สำคัญที่ระบุหรือค่าขึ้นอยู่กับการสั่งซื้อด้วยวิธีการเลือก |
equalTo() | รายการย้อนกลับเท่ากับคีย์ที่ระบุหรือค่าขึ้นอยู่กับการสั่งซื้อด้วยวิธีการได้รับการแต่งตั้ง |
ซึ่งแตกต่างจากการสั่งซื้อด้วยวิธีการคุณสามารถรวมหลายขีด จำกัด หรือช่วงที่ฟังก์ชั่น ตัวอย่างเช่นคุณสามารถรวม startAt()
และ endAt()
วิธีการที่จะ จำกัด ผลให้ช่วงที่ระบุของค่า
จำกัด จำนวนของผล
คุณสามารถใช้ limitToFirst()
และ limitToLast()
วิธีการที่จะกำหนดจำนวนสูงสุดของเด็กที่จะได้รับการซิงค์สำหรับเหตุการณ์ที่กำหนด ตัวอย่างเช่นถ้าคุณใช้ limitToFirst()
ที่จะกำหนดวงเงิน 100, คุณเริ่มเพียง แต่ได้รับถึง 100 onChildAdded
เหตุการณ์ ถ้าคุณมีน้อยกว่า 100 รายการที่จัดเก็บในฐานข้อมูล Firebase ของคุณ onChildAdded
เหตุการณ์ fires สำหรับแต่ละรายการ
เป็นรายการเปลี่ยนคุณได้รับ onChildAdded
กิจกรรมสำหรับรายการที่ป้อนการสืบค้นและ onChildRemoved
กิจกรรมสำหรับรายการที่หล่นออกมาจากมันเพื่อให้การเข้าพักจำนวนทั้งหมด 100
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการตัวอย่างเช่นแอปบล็อกกำหนดแบบสอบถามเพื่อดึงรายชื่อกระทู้ล่าสุด 100 โดยผู้ใช้ทั้งหมด:
final recentPostsRef = FirebaseDatabase.instance.ref('posts').limitToLast(100);
ตัวอย่างนี้จะกำหนดแบบสอบถามเพื่อประสานข้อมูลจริงจะต้องมีการแนบ ฟัง
กรองตามคีย์หรือค่า
คุณสามารถใช้ startAt()
, startAfter()
, endAt()
, endBefore()
และ equalTo()
ให้เลือกเริ่มต้นโดยพลการสิ้นสุดและจุดสมมูลสำหรับการค้นหา ซึ่งจะเป็นประโยชน์สำหรับเลขหน้าข้อมูลหรือการค้นหารายการที่มีเด็กที่มีความคุ้มค่าที่เฉพาะเจาะจง
วิธีการค้นหาข้อมูลได้รับคำสั่ง
ส่วนนี้จะอธิบายวิธีการที่ข้อมูลจะถูกจัดเรียงโดยแต่ละคำสั่งซื้อโดยวิธีการใน Query
ระดับ
orderByChild
เมื่อใช้ orderByChild()
ข้อมูลที่มีคีย์เด็กที่ระบุเป็นคำสั่งดังต่อไปนี้:
- เด็กที่มี
null
คุ้มค่าสำหรับคีย์เด็กที่ระบุมาก่อน - เด็กที่มีค่า
false
สำหรับคีย์เด็กที่ระบุมาต่อไป ถ้าลูกหลานหลายมีค่าfalse
พวกเขาจะเรียง lexicographically โดยคีย์ - เด็กที่มีค่าของ
true
สำหรับคีย์เด็กที่ระบุมาต่อไป ถ้าลูกหลานหลายมีค่าtrue
ของ พวกเขาจะถูกจัดเรียง lexicographically โดยคีย์ - เด็กที่มีค่าตัวเลขมาถัดไปเรียงตามลำดับจากน้อยไปมาก ถ้าเด็กมีหลายค่าตัวเลขเหมือนกันสำหรับเด็กโหนดที่ระบุพวกเขาจะเรียงตามคีย์
- Strings มาหลังจากที่ตัวเลขและจะเรียง lexicographically ในการเรียงลำดับ ถ้าลูกหลานหลายมีค่าเหมือนกันสำหรับเด็กโหนดที่ระบุว่าพวกเขาจะได้รับคำสั่ง lexicographically โดยคีย์
- วัตถุที่มาที่ผ่านมาและจะเรียง lexicographically โดยคีย์ในการเรียงลำดับ
orderByKey
เมื่อใช้ orderByKey()
ในการจัดเรียงข้อมูลของข้อมูลที่ถูกส่งกลับในเรียงลำดับโดยคีย์
- เด็กที่มีความสำคัญที่สามารถแยกวิเคราะห์เป็น 32 บิตจำนวนเต็มมาแรกเรียงเรียงลำดับขึ้น
- เด็กที่มีค่าสตริงเป็นกุญแจสำคัญของพวกเขามาต่อไปเรียง lexicographically ในการเรียงลำดับ
orderByValue
เมื่อใช้ orderByValue()
เด็กจะได้รับคำสั่งจากค่าของพวกเขา เกณฑ์การสั่งซื้อเป็นเช่นเดียวกับใน orderByChild()
ยกเว้นค่าของโหนดที่ใช้แทนค่าของคีย์เด็กที่ระบุ
ฟังถอด
เรียกกลับจะถูกลบออกโดยการเรียก off()
วิธีการในการอ้างอิงฐานข้อมูลของคุณ Firebase
คุณสามารถลบเป็นผู้ฟังที่เดียวโดยผ่านมันเป็นพารามิเตอร์ไป off()
โทร off()
ในสถานที่ที่มีการขัดแย้งไม่มีเอาฟังทั้งหมดในสถานที่นั้น
โทร off()
ในการเป็นผู้ฟังที่พ่อแม่ไม่ได้โดยอัตโนมัติลบฟังการลงทะเบียนบนโหนดลูกของตน off()
นอกจากนี้ยังต้องมีการเรียกร้องให้ฟังเด็ก ๆ ที่จะเอาโทรกลับ