Saya hanya menjelajahi Firebase Firestore baru dan berisi tipe data yang disebut reference
. Tidak jelas bagi saya apa yang dilakukannya.
- Apakah itu seperti kunci asing?
- Bisakah itu digunakan untuk menunjuk ke koleksi yang terletak di tempat lain?
- Jika
reference
merupakan referensi aktual, dapatkah saya menggunakannya untuk permintaan? Sebagai contoh, bisakah saya memiliki referensi yang menunjuk langsung ke pengguna, daripada menyimpan userId di bidang teks? Dan bisakah saya menggunakan referensi pengguna ini untuk menanyakan?
firebase
google-cloud-firestore
Jürgen Brandstetter
sumber
sumber
Jawaban:
Referensi sangat mirip dengan kunci asing.
SDK yang saat ini dirilis tidak dapat menyimpan referensi ke proyek lain. Dalam suatu proyek, referensi dapat menunjuk ke dokumen lain dalam koleksi lainnya.
Anda dapat menggunakan referensi dalam kueri seperti nilai lainnya: untuk memfilter, memesan, dan untuk paging (startAt / startAfter).
Tidak seperti kunci asing dalam database SQL, referensi tidak berguna untuk melakukan penggabungan dalam satu permintaan. Anda dapat menggunakannya untuk pencarian dependen (yang terlihat seperti bergabung), tetapi hati-hati karena setiap hop akan menghasilkan perjalanan pulang-pergi lain ke server.
sumber
friends
koleksi yang mencantumkan semua teman saya (friends/myId
). Lalu, saya merujuk dokumen ini difriends
bidang dokumen lain (group/groupId
). Saya ingin menampilkan hanya teman-teman saya yang berada di kelompok itu, melakukan sesuatu seperti ini:where('friends.myId', '==', true)
.Menambahkan di bawah ini apa yang berhasil bagi saya menggunakan referensi di Firestore.
Seperti jawaban yang lain katakan, itu seperti kunci asing. Atribut referensi tidak mengembalikan data dari dokumen referensi. Sebagai contoh, saya punya daftar produk, dengan referensi userRef sebagai salah satu atribut pada produk. Mendapatkan daftar produk, memberi saya referensi pengguna yang menciptakan produk itu. Tetapi itu tidak memberi saya rincian pengguna dalam referensi itu. Saya telah menggunakan ujung belakang lain sebagai layanan dengan pointer sebelum yang memiliki bendera "populate: true" yang memberikan rincian pengguna kembali, bukan hanya id referensi pengguna, yang akan lebih baik untuk memiliki di sini (semoga perbaikan di masa depan ).
Di bawah ini adalah beberapa contoh kode yang saya gunakan untuk mengatur referensi serta mendapatkan koleksi daftar produk kemudian mendapatkan detail pengguna dari id referensi pengguna yang diberikan.
Tetapkan referensi pada koleksi:
Dapatkan koleksi (produk) dan semua referensi pada setiap dokumen (detail pengguna):
Semoga ini membantu
sumber
db.collection('products').get()
. Sudahkah Anda mencoba mendapatkan pengguna secara langsung? Saya kira lebih baiknewItem.userRef.get()
bekerja daripadadb.collection("users").doc(newItem.userRef.id).get()
uid
dan referensi melalui itu.reference
jika kita tidak dapat menggunakannya sebagai kunci asing yang benar harus bekerja?reference
lebihstring
adalah, bahwa Anda dapat memanggilget()
referensi secara langsung. Belum terlalu berguna. Semoga mereka menambahkan opsi untuk secara otomatis mengisi referensi dengan objek yang sesuai!Bagi mereka yang mencari solusi Javascript untuk query dengan referensi - konsepnya adalah, Anda perlu menggunakan objek 'referensi dokumen' dalam pernyataan permintaan
(Kudos untuk jawabannya di sini: https://stackoverflow.com/a/53141199/1487867 )
sumber