Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Menyoal Firebase dengan Cekap untuk Sembang yang Mengandungi Peserta Tertentu?

Bagaimana untuk Menyoal Firebase dengan Cekap untuk Sembang yang Mengandungi Peserta Tertentu?

Susan Sarandon
Lepaskan: 2024-12-24 08:10:15
asal
977 orang telah melayarinya

How to Efficiently Query Firebase for Chats Containing a Specific Participant?

Cara Menyoal Jadual Firebase untuk Nilai yang Terkandung dalam Kanak-Kanak

Pengenalan

Pangkalan data Firebase menawarkan pelbagai ciri untuk data pengurusan. Satu cabaran biasa ialah menanyakan data berdasarkan nilai dalam struktur anak bersarang. Panduan ini menunjukkan cara mengendalikan pertanyaan sedemikian dengan cekap dalam Firebase.

Ikhtisar Masalah

Pertimbangkan struktur jadual berikut:

chats
--> randomId
-->--> participants
-->-->--> 0: 'name1'
-->-->--> 1: 'name2'
-->--> chatItems
Salin selepas log masuk

Matlamatnya adalah untuk menanyakan 'sembang' jadual untuk mendapatkan semula semua sembang yang termasuk peserta tertentu. Percubaan pertanyaan semasa:

subscribeChats(username: string) {
    return this.af.database.list('chats', {
        query: {
            orderByChild: 'participants',
            equalTo: username, // How to check if participants contain username
        }
    });
 }
Salin selepas log masuk

Menghadapi cabaran disebabkan oleh pengehadan mengindeks laluan tetap dalam Firebase.

Penyelesaian: Set lwn Array dan Penyongsangan Indeks

1. Set lwn. Tatasusunan:

Struktur data yang digunakan pada mulanya disimpan peserta sebagai tatasusunan, yang membenarkan pendua dan tidak menggambarkan model peserta unik yang diingini. Set Firebase menyediakan penyelesaian yang lebih sesuai, memastikan setiap kanak-kanak wujud sekali sahaja.

participants: {
  "puf": true
}
Salin selepas log masuk

2. Penyongsangan Indeks:

Daripada meletakkan peserta dalam sembang, struktur harus diterbalikkan untuk mencipta "indeks terbalik" yang menyenaraikan sembang berdasarkan peserta mereka. Ini membolehkan pertanyaan yang cekap untuk bilik sembang pengguna:

userChatrooms: {
  john: {
    chatRoom1: true,
    chatRoom2: true
  },
  puf: {
    chatRoom1: true,
    chatRoom3: true
  }
}
Salin selepas log masuk

Kini, pertanyaan berikut boleh mendapatkan semula bilik sembang pengguna:

ref.child("userChatrooms").child("john")
Salin selepas log masuk

Alternatif Cloud Firestore

Cloud Firestore menawarkan sokongan yang dipertingkatkan untuk jenis pertanyaan ini dengan pengendalinya yang mengandungi tatasusunan, yang membenarkan menapis dokumen berdasarkan nilai dalam tatasusunan:

query = collection.where('participants', 'array-contains', username);
Salin selepas log masuk

Ini menyediakan penyelesaian yang lebih ringkas dan cekap berbanding di Firestore.

Kesimpulan

Dalam Firebase, menanyakan struktur data bersarang memerlukan perancangan dan pemahaman yang teliti tentang had struktur data. Dengan menggunakan set dan indeks terbalik serta memanfaatkan operator yang mengandungi tatasusunan Cloud Firestore, pembangun boleh mengendalikan pertanyaan sedemikian dengan cekap dalam aplikasi Firebase mereka.

Atas ialah kandungan terperinci Bagaimana untuk Menyoal Firebase dengan Cekap untuk Sembang yang Mengandungi Peserta Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan