Penghitung Kenaikan Cloud Function tanpa membaca dokumen

Saya ingin menambah atau mengurangi angka di fungsi cloud tanpa membaca dokumen.

Saya memiliki dokumen item, dan ketika dokumen diperbarui, ia memeriksa kuantitasnya. jika jumlahnya lebih dari nol, tambah jumlah item profil toko. Jadi katakanlah toko memiliki 10 item yang tersedia, dan bidang dokumen item telah diperbarui dari 0 menjadi 1 inventaris, saya perlu menambah jumlah item toko menjadi 11.

Saya ingat pernah membaca di blog firebase bahwa ada fitur baru yang memungkinkan hal ini. Tapi bagaimana kita melakukannya di fungsi cloud?


person Mozes ong    schedule 01.04.2019    source sumber


Jawaban (1)


Anda menggunakan fitur di Cloud Functions melalui Admin SDK. Berikut adalah contoh berdasarkan proyek yang sedang saya kerjakan.

Pertama Anda mengimpor Admin SDK:

var admin = require('firebase-admin');

Dan kemudian di Cloud Function Anda menambah bidang tersebut dengan sesuatu seperti:

var firestore = admin.firestore();
var docRef = firestore.collection('your_collection').doc('your_document');
docRef.update({ itemCount: admin.firestore.FieldValue.increment(1) })

Ini menambah bidang itemCount sebanyak 1.

Lihat juga:

person Frank van Puffelen    schedule 01.04.2019
comment
const admin = memerlukan('firebase-admin'); docRef.update({ 'availableItemsCount' : admin.firestore().FieldValue.increment(1), }); kesalahan: TypeError: Tidak dapat membaca 'peningkatan' properti yang tidak ditentukan di ekspor.setAvailableItemsCount.functions.firestore.document.onUpdate (/srv/index.js:206:74) di ‹anonymous› di process._tickDomainCallback (internal/process/next_tick .js:229:7) - person Mozes ong; 01.04.2019
comment
Hmmm.... Saya kira fitur ini juga sudah dirilis di Admin SDK. Biarkan saya memeriksa... - person Frank van Puffelen; 01.04.2019
comment
Ini pasti tersedia di firebase-admin 7.2.0 - @Mozesong Anda mungkin perlu memperbarui dependensi Anda. - person oodavid; 01.04.2019
comment
Bukankah seharusnya admin.firestore.FieldValue dan bukan admin.firestore().FieldValue? - person Renaud Tarnec; 01.04.2019
comment
Terima kasih oodavid, entah bagaimana saya tidak bisa menemukannya. Dan terima kasih Renaud. Saya telah menggunakan ini di aplikasi web, jadi mungkin sintaks Admin SDK salah. Tapi FieldValue adalah kelas statis, jadi harus mendapatkan instance Firestore. - person Frank van Puffelen; 01.04.2019
comment
@Mozesong: seperti yang ditunjukkan Renaud, seharusnya admin.firestore.FieldValue tanpa tanda kurung setelah firestore. - person Frank van Puffelen; 01.04.2019
comment
itu tidak berhasil. docRef.update({ 'availableItemsCount' : admin.firestore.FieldValue.increment(1), }); kesalahan: TypeError: admin.firestore.FieldValue.increment bukan fungsi di ekspor.setAvailableItemsCount.functions.firestore.document.onUpdate (/srv/index.js:201:74) di ‹anonim› di process._tickDomainCallback (internal/ proses/next_tick.js:229:7) versi: [email protected] - person Mozes ong; 02.04.2019
comment
Saya baru saja mengujinya di sistem saya sendiri, dan setelah memutakhirkan ke versi 7.2 dari Admin SDK admin.firestore.FieldValue.increment(1) menyelesaikannya tanpa masalah. Saya tidak yakin mengapa itu tidak berhasil untuk Anda. - person Frank van Puffelen; 02.04.2019
comment
Firestore.d.ts saya tidak memiliki fungsi inrice(). apa yang saya lakukan? - person Mozes ong; 03.04.2019
comment
@FrankvanPuffelen Saya masih tidak dapat menambah - person Mozes ong; 04.04.2019
comment
Maaf @Mozesong, karena saya tidak dapat mereproduksi masalahnya, tidak banyak yang dapat saya lakukan untuk membantu. Anda mungkin ingin melihat apakah Anda dapat menyertakan MCVE dalam pertanyaan Anda. Saya memahami hal ini mungkin rumit, namun saat ini kami terjebak pada pekerjaan di satu mesin, bukan di mesin lain, sehingga menyulitkan saya untuk membantu. - person Frank van Puffelen; 04.04.2019
comment
github.com/googleapis/nodejs-firestore/issues/ terselesaikan. Sebagian masalah saya dan sebagian lagi merupakan kesalahan pembaruan. - person Mozes ong; 14.04.2019
comment
Apakah dokumentasi perlu diperbarui? firebase.google.com/docs/reference/admin/node/ - person wtk; 07.05.2019
comment
Yup, sepertinya itu tidak up-to-date. Saya baru saja mengajukan bug. Terima kasih telah menandai! - person Frank van Puffelen; 07.05.2019
comment
@FrankvanPuffelen tetapi karena fungsi cloud mungkin berjalan lebih dari sekali dalam satu pemanggilan, menggunakan FieldValue.increment di Cloud Functions tidak pernah aman, bukan? - person dshukertjr; 22.09.2019
comment
Catatan: Pembaruan akan gagal jika diterapkan pada dokumen yang tidak ada. - person Rifat; 30.03.2021