ทำงานกับรายการข้อมูล

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

ได้รับการอ้างอิงฐานข้อมูล

ในการอ่านหรือเขียนข้อมูลจากฐานข้อมูลที่คุณต้องการตัวอย่างของ 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() ข้อมูลที่มีคีย์เด็กที่ระบุเป็นคำสั่งดังต่อไปนี้:

  1. เด็กที่มี null คุ้มค่าสำหรับคีย์เด็กที่ระบุมาก่อน
  2. เด็กที่มีค่า false สำหรับคีย์เด็กที่ระบุมาต่อไป ถ้าลูกหลานหลายมีค่า false พวกเขาจะเรียง lexicographically โดยคีย์
  3. เด็กที่มีค่าของ true สำหรับคีย์เด็กที่ระบุมาต่อไป ถ้าลูกหลานหลายมีค่า true ของ พวกเขาจะถูกจัดเรียง lexicographically โดยคีย์
  4. เด็กที่มีค่าตัวเลขมาถัดไปเรียงตามลำดับจากน้อยไปมาก ถ้าเด็กมีหลายค่าตัวเลขเหมือนกันสำหรับเด็กโหนดที่ระบุพวกเขาจะเรียงตามคีย์
  5. Strings มาหลังจากที่ตัวเลขและจะเรียง lexicographically ในการเรียงลำดับ ถ้าลูกหลานหลายมีค่าเหมือนกันสำหรับเด็กโหนดที่ระบุว่าพวกเขาจะได้รับคำสั่ง lexicographically โดยคีย์
  6. วัตถุที่มาที่ผ่านมาและจะเรียง lexicographically โดยคีย์ในการเรียงลำดับ

orderByKey

เมื่อใช้ orderByKey() ในการจัดเรียงข้อมูลของข้อมูลที่ถูกส่งกลับในเรียงลำดับโดยคีย์

  1. เด็กที่มีความสำคัญที่สามารถแยกวิเคราะห์เป็น 32 บิตจำนวนเต็มมาแรกเรียงเรียงลำดับขึ้น
  2. เด็กที่มีค่าสตริงเป็นกุญแจสำคัญของพวกเขามาต่อไปเรียง lexicographically ในการเรียงลำดับ

orderByValue

เมื่อใช้ orderByValue() เด็กจะได้รับคำสั่งจากค่าของพวกเขา เกณฑ์การสั่งซื้อเป็นเช่นเดียวกับใน orderByChild() ยกเว้นค่าของโหนดที่ใช้แทนค่าของคีย์เด็กที่ระบุ

ฟังถอด

เรียกกลับจะถูกลบออกโดยการเรียก off() วิธีการในการอ้างอิงฐานข้อมูลของคุณ Firebase

คุณสามารถลบเป็นผู้ฟังที่เดียวโดยผ่านมันเป็นพารามิเตอร์ไป off() โทร off() ในสถานที่ที่มีการขัดแย้งไม่มีเอาฟังทั้งหมดในสถานที่นั้น

โทร off() ในการเป็นผู้ฟังที่พ่อแม่ไม่ได้โดยอัตโนมัติลบฟังการลงทะเบียนบนโหนดลูกของตน off() นอกจากนี้ยังต้องมีการเรียกร้องให้ฟังเด็ก ๆ ที่จะเอาโทรกลับ

ขั้นตอนถัดไป