Pernyataan Masalah:
Anda mempunyai dokumen dalam Firestore dengan medan tatasusunan yang mengandungi objek. Anda perlu mengemas kini medan tertentu dalam objek di dalam tatasusunan. Walau bagaimanapun, cubaan untuk mengemas kini terus menggunakan notasi titik (item.${index}.meta.description) tidak berfungsi dengan betul.
Firestore tidak menyokong pengemaskinian secara langsung elemen tertentu dalam tatasusunan diindeks. Sebaliknya, pertimbangkan alternatif berikut:
Pilihan 1: Tulis Semula Keseluruhan Tatasusunan
Daripada mengemas kini medan tertentu, baca keseluruhan tatasusunan daripada dokumen, buat yang diingini pengubahsuaian dalam ingatan, kemudian kemas kini medan tatasusunan yang diubah suai secara keseluruhan:
const key = `items.${this.state.index}.meta`; let items = this.state.items; items[this.state.index].meta.description = 'hello bar'; this.design.update({ [key]: items, })
Pendekatan ini menulis semula dengan berkesan keseluruhan tatasusunan, yang mungkin tidak cekap jika tatasusunan itu besar.
Pilihan 2: Gunakan Operasi Tatasusunan
Walaupun Firestore tidak membenarkan kemas kini terus kepada elemen tatasusunan sedia ada, anda masih boleh menambah atau mengalih keluar elemen menggunakan operasi tatasusunan. Contohnya, untuk menambahkan elemen baharu pada tatasusunan:
this.design.update({ items: FieldValue.arrayUnion({ name: 'New Item', meta: { image: 'def.png', description: 'hello new item', } }) })
Untuk mengalih keluar elemen, gunakan FieldValue.arrayRemove().
Cadangan:
Jika tatasusunan agak kecil, Pilihan 1 (menulis semula keseluruhan tatasusunan) boleh menjadi penyelesaian yang mudah. Walau bagaimanapun, jika tatasusunan besar, Pilihan 2 (menggunakan operasi tatasusunan) adalah lebih cekap kerana ia mengelak daripada menulis ganti keseluruhan tatasusunan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengemas kini Medan Bersarang dalam Tatasusunan dalam Firestore?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!