Rumah >hujung hadapan web >tutorial js >NgSysV: Templat CRUD Firestore

NgSysV: Templat CRUD Firestore

Linda Hamilton
Linda Hamiltonasal
2024-12-04 05:31:15901semak imbas

NgSysV: Firestore CRUD templates

Siri siaran ini diindeks di NgateSystems.com. Anda akan temui kemudahan carian kata kunci yang sangat berguna di sana juga.

Semakan terakhir: Nov '24

pengenalan

Dokumentasi dalam talian Google yang meluas untuk arahan Firestore CRUD (buat, baca, kemas kini, padam) mungkin terlalu terperinci untuk kegunaan harian. Berikut ialah templat untuk fungsi Firestore yang paling penting. Saya cadangkan anda memotong dan menampalnya seperti sedia ada dan kemudian menggantikan perkataan "saya" dalam nama pembolehubah dengan beberapa pengecutan yang sesuai bagi nama koleksi yang anda sasarkan. Contohnya, rujukan kepada koleksi yang dipanggil "Lecture_events" mungkin dikodkan sebagai "lecEvtsCollRef".

Mencipta dokumen

Untuk mencipta dokumen yang mengandungi objek myDocData dengan id dijana secara automatik:

let myDocData =  .... create an object containing your data item properties .....
const myCollRef = collection(db, "myCollectionName");
const myDocRef = doc(myCollRef);
await setDoc(myDocRef, myDocData);

Perhatikan bahawa, secara mengelirukan, Dokumentasi Google tentang 'Menambah Data' merujuk fungsi addDoc sebagai alternatif kepada setDoc. Lihat Postskrip di bawah untuk mendapatkan nasihat tentang sebab setDocis lebih disukai.

Dalam coretan kod di atas, pernyataan myDocRef= ialah titik di mana auto-id diperuntukkan. Jika anda perlu mencari nilai yang telah ditetapkan, anda akan menemuinya di myDocRef.id. Sekali lagi, lihat Postscript di bawah untuk mendapatkan maklumat lanjut tentang perkara ini.

Untuk mencipta dokumen dengan item data sebagai pengecamnya :

let myDocData =  .... create a data object  ..... 
let myDocumentIdentifier = .... create your identifier ....
const myDocRef = doc(db, "myCollectionName", myDocumentIdentifier)
await setDoc(myDocRef, myDocData);

Membaca dokumen

Untuk mendapatkan dokumen individu menggunakan id dokumennya:

const myDocRef = doc(db, "myCollectionName", myDocId);
const myDoc = await getDoc(myDocRef);  
if (myDoc.exists()) {
  console.log("Document data:", myDoc.data());
} 

Untuk mendapatkan pemilihan dokumen dengan kriteria pemilihan dan pesanan (contoh):

const myCollRef = collection(db, "myCollectionName");
const myQuery = query(myCollRef, where("myField1Name", "==", myField1Value), orderBy("myField2Name", "asc"));
const mySnapshot = await getDocs(myQuery);
mySnapshot.forEach((myDoc) => {
  console.log(myDoc.id, " => ", myDoc.data());
});

Dalam Snapshot's forEach, data untuk dokumen tersedia sebagai myDoc.data(), docRef dokumen ialah myDoc.ref dan docIdnya sebagai myDoc.id. Jika anda hanya berminat untuk menentukan kewujudan dokumen yang sepadan dengan kriteria pemilihan, helah yang berguna ialah menyemak bukan sifar mySnapshot.size.

Jika anda ingin merujuk kepada dokumen individu dalam tatasusunan syot kilat, anda akan menemui data untuk entri ke-n di mySnapshot.docs[n].data() dan idnya di mySnapshot.docs[n]. id

Perhatikan bahawa jika anda tidak menyatakan medan orderBy, dokumen akan dikembalikan dalam susunan menaik docId. Dan jika anda memasukkan lebih daripada satu medan tempat, anda mesti mencipta indeks (kompaun). Alat pemeriksaan penyemak imbas akan membantu anda di sini. Anda hanya perlu mengikuti pautan dalam mesej ralat "diperlukan indeks". Medan individu diindeks secara automatik dalam pangkalan data Firestore.

Untuk mendapatkan semua dokumen dalam koleksi:

const myCollRef = collection(db, "myCollectionName");
const myQuery = query(myCollRef);
const mySnapshot = await getDocs(myQuery);
mySnapshot.forEach((myDoc) => {
  console.log(myDoc.id, " >= ", myDoc.data());
});

Pengendali perbandingan Firestore ialah "==", ">" , "<", "<=", ">=" dan "!=", serta beberapa pengendali keahlian tatasusunan yang menarik.

Untuk mendapatkan semua dokumen dalam hierarki koleksi dan kemudian lakukan sesuatu:

Anda perlu berhati-hati apabila anda ingin melakukan tindakan tertentu selepas pemprosesan pada hierarki koleksi berbilang peringkat telah selesai. Jika kod anda mengandungi banyak pernyataan foreach bersarang, setiap satu mengandungi arahan menunggu, anda tidak boleh bergantung pada individu yang menunggu untuk memberitahu anda apabila keseluruhan set telah selesai. Setiap individu yang menunggu ini menduduki urutan yang berasingan dan ini tidak berkomunikasi secara langsung antara satu sama lain dalam apa-apa cara yang membantu.

Salah satu jalan keluar daripada masalah ini ialah menggunakan gelung tradisional untuk tangkapan gambar anda dan bukannya forEachs. Berikut ialah contoh yang menyasarkan semua kanak-kanak dalam subkoleksi sebelum melakukan tindakan

let myDocData =  .... create an object containing your data item properties .....
const myCollRef = collection(db, "myCollectionName");
const myDocRef = doc(myCollRef);
await setDoc(myDocRef, myDocData);

Di sini, anda boleh bergantung pada penantian anda untuk dilakukan dalam urutan yang ketat, dan apabila anda mencapai penghujung gelung, anda tahu anda boleh meneruskan dengan yakin untuk melakukan tindakan bergantung anda. Tetapi prestasi yang dicapai oleh ini mungkin penting dan oleh itu anda mungkin berminat dengan susunan berikut:

Anda boleh mendapatkan pegangan pada janji individu yang dilancarkan oleh menunggu dalam gelung forEach dengan menyimpannya dalam tatasusunan. Anda kemudian boleh menggunakan arahan Promise.all yang menanti pada tatasusunan ini untuk mengetahui apabila semua janji ahlinya dilakukan. Adalah mustahil untuk menyediakan templat mudah di sini untuk disesuaikan dengan semua keadaan, tetapi yang berikut ialah "lakaran" yang menggambarkan prinsip yang luas.

Di sini, hierarki dua peringkat yang melibatkan dua koleksi berasingan (ibu bapa dan anak) dipautkan oleh medan parentsId yang sama. Kedua-dua koleksi dibaca ke dalam ingatan untuk membenarkan analisis agregat. Ini hanya boleh dilakukan apabila semua kanak-kanak telah dibaca.

let myDocData =  .... create a data object  ..... 
let myDocumentIdentifier = .... create your identifier ....
const myDocRef = doc(db, "myCollectionName", myDocumentIdentifier)
await setDoc(myDocRef, myDocData);

Mengemas kini dokumen

Contoh - untuk menukar nilai harta myField dalam kandungan myDocData dokumen

const myDocRef = doc(db, "myCollectionName", myDocId);
const myDoc = await getDoc(myDocRef);  
if (myDoc.exists()) {
  console.log("Document data:", myDoc.data());
} 

Contoh - untuk menggantikan keseluruhan kandungan dokumen myDocId dengan objek baharu yang mengandungi hanya harta myField

const myCollRef = collection(db, "myCollectionName");
const myQuery = query(myCollRef, where("myField1Name", "==", myField1Value), orderBy("myField2Name", "asc"));
const mySnapshot = await getDocs(myQuery);
mySnapshot.forEach((myDoc) => {
  console.log(myDoc.id, " => ", myDoc.data());
});

Anda boleh menggunakan perubahan pada beberapa medan secara serentak dengan menggantikan bit {myField: myFieldValue} dalam contoh di atas dengan objek yang mengandungi medan yang anda ingin ubah.

Memadam dokumen

const myCollRef = collection(db, "myCollectionName");
const myQuery = query(myCollRef);
const mySnapshot = await getDocs(myQuery);
mySnapshot.forEach((myDoc) => {
  console.log(myDoc.id, " >= ", myDoc.data());
});

Operasi CRUD dalam urus niaga

Di dalam transaksi, corak yang diperkenalkan di atas kekal tidak berubah tetapi arahan setDoc dipinda seperti berikut:

Dalam runTransaction(db, async (transaction) => { ... }).catch(); fungsi:

  • getDoc digantikan dengan transaction.get()
  • setDoc digantikan dengan transaction.set()
  • deleteDoc digantikan dengan transaction.delete()

Posskrip

  1. Seperti yang dinyatakan di atas, Google menyediakan fungsi addDoc() dan updateDoc() untuk pembuatan dokumen dan kemas kini selari dengan setDoc(). Tetapi ini nampaknya tidak perlu mengelirukan apabila setDoc boleh melaksanakan kedua-dua operasi. Selain itu, apabila ia berkaitan dengan transaksi, addDoc() hanya boleh digunakan untuk membuat dokumen dengan id automatik. Nampaknya lebih mudah, dalam amalan, hanya menggunakan setDoc di mana-mana sahaja.

  2. Anda mungkin perasan bahawa tiada penantian pada panggilan doc(myCollRef) yang mencipta pengecam dokumen Firestore. Ini memberitahu anda bahawa Firestore entah bagaimana berjaya melakukan ini tanpa benar-benar melawat koleksi dan melihat apa yang sudah digunakan. Jika anda ingin tahu tentang cara ia mengurus ini, anda mungkin ingin melihat perbincangan di StackOverflow.

Rujukan dokumentasi Google

  • Tambahkan data pada Cloud Firestore : https://firebase.google.com/docs/firestore/manage-data/add-data

  • Baca data dengan Cloud Firestore : https://firebase.google.com/docs/firestore/query-data/get-data

  • Padamkan data daripada Cloud Firestore : https://firebase.google.com/docs/firestore/manage-data/delete-data

Dokumentasi SDK boleh didapati di:

  • https://firebase.google.com/docs/reference/js/firestore_ dan
  • https://firebase.google.com/docs/reference/js/firestore_.transaction

Atas ialah kandungan terperinci NgSysV: Templat CRUD Firestore. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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