Saya pikir saya pernah membaca bahwa Anda dapat meminta subkoleksi dengan Firebase Firestore baru, tetapi saya tidak melihat contoh apa pun. Misalnya saya memiliki pengaturan Firestore saya dengan cara berikut:
- Tarian [koleksi]
- danceName
- Lagu [koleksi]
- nama lagu
Bagaimana saya bisa menanyakan "Temukan semua tarian di mana songName == 'X'"
firebase
google-cloud-firestore
Nelson.b.austin
sumber
sumber
Jawaban:
Perbarui 2019-05-07
Hari ini kami merilis kueri grup koleksi , dan ini memungkinkan Anda untuk membuat kueri di seluruh subkoleksi.
Jadi, misalnya di web SDK:
Ini akan mencocokkan dokumen dalam koleksi mana pun yang bagian terakhir jalur koleksinya adalah 'Lagu'.
Pertanyaan awal Anda adalah tentang menemukan tarian di mana songName == 'X', dan ini masih tidak mungkin secara langsung, namun, untuk setiap Lagu yang cocok, Anda dapat memuat induknya.
Jawaban asli
Ini adalah fitur yang belum ada. Ini disebut "kueri grup koleksi" dan memungkinkan Anda menanyakan semua lagu terlepas dari tarian mana yang berisi lagu tersebut. Ini adalah sesuatu yang ingin kami dukung tetapi tidak memiliki garis waktu yang konkret kapan itu akan datang.
Struktur alternatif pada tahap ini adalah menjadikan lagu-lagu sebagai koleksi tingkat atas dan menjadikan tarian mana dari lagu tersebut sebagai bagian dari properti lagu.
sumber
UPDATE Sekarang Firestore mendukung array-contains
Memiliki dokumen-dokumen ini
lakukan dengan cara ini
@ Nelson.b.austin Karena firestore belum memiliki itu, saya sarankan Anda untuk memiliki struktur yang datar, artinya:
Dengan cara seperti itu, Anda bisa menyelesaikannya:
Saya harap ini membantu.
sumber
songName_Title3: false
berguna? jika saya tidak salah, itu hanya dapat digunakan untuk mencari tarian yang tidak memiliki nama lagu tertentu dengan asumsi bahwa kami membutuhkansongName_Title3: false
untukdances.where("songName_"+songTitle, "==", false);
mengembalikan hasil seperti itu tidak masuk akal jika setiap tarian memiliki bendera boolean untuk setiap lagu yang mungkin nama ...Bagaimana jika Anda menyimpan lagu sebagai objek, bukan sebagai koleksi? Setiap menari sebagai, dengan lagu sebagai bidang: ketik Objek (bukan koleksi)
maka Anda dapat menanyakan semua tarian dengan aNameOfASong:
sumber
UPDATE 2019
Firestore telah merilis Kueri Grup Koleksi. Lihat jawaban Gil di atas atau Dokumentasi Kueri Grup Koleksi resmi
Jawaban Sebelumnya
Seperti yang dinyatakan oleh Gil Gilbert, sepertinya kueri grup koleksi sedang dalam pengerjaan. Sementara itu, mungkin lebih baik menggunakan koleksi tingkat akar dan hanya menautkan antara koleksi ini menggunakan UID dokumen.
Bagi mereka yang belum tahu, Jeff Delaney memiliki beberapa panduan dan sumber daya yang luar biasa untuk siapa pun yang bekerja dengan Firebase (dan Angular) di AngularFirebase .
Pemodelan Data Relasional Firestore NoSQL - Di sini ia menjelaskan dasar-dasar penataan NoSQL dan Firestore DB
Pemodelan Data Tingkat Lanjut Dengan Firestore dengan Contoh - Ini adalah teknik yang lebih maju untuk diingat. Bacaan yang bagus untuk mereka yang ingin meningkatkan keterampilan Firestore mereka ke tingkat berikutnya
sumber
PEMBARUAN BARU 8 Juli 2019:
sumber
Anda selalu dapat menelusuri seperti ini: -
sumber
sumber
sumber
Akan lebih baik jika menggunakan struktur data datar.
Dokumen menjelaskan pro dan kontra dari berbagai struktur data di halaman ini .
Khususnya tentang batasan struktur dengan sub-koleksi:
Dibandingkan dengan keuntungan yang diklaim dari struktur data datar:
sumber
Saya telah menemukan solusi. Tolong periksa ini.
Kemudian Anda dapat melihat tab Data, Rules, Indexes, Usage di cloud firestore Anda dari console.firebase.google.com. Terakhir, Anda harus menyetel indeks di tab indeks.
Isi ID koleksi dan beberapa nilai bidang di sini. Kemudian Pilih opsi grup koleksi. Bersenang senang lah. Terima kasih
sumber
Saya bekerja dengan Observables di sini dan bungkus AngularFire tetapi inilah cara saya berhasil melakukannya.
Agak gila, saya masih belajar tentang yang bisa diamati dan saya mungkin melebih-lebihkannya. Tapi itu latihan yang bagus.
Beberapa penjelasan (bukan ahli RxJS):
in
kueri.Saya menyalin menempelkan kode saya dan mengubah nama variabel menjadi milik Anda, tidak yakin apakah ada kesalahan, tetapi itu berfungsi dengan baik untuk saya. Beri tahu saya jika Anda menemukan kesalahan atau dapat menyarankan cara yang lebih baik untuk mengujinya dengan mungkin beberapa firestore tiruan.
sumber