Счетчик приращения облачной функции без чтения документа

Я хочу увеличить или уменьшить число в облачных функциях, не читая документ.

У меня есть документы на товар, и когда документ обновляется, он проверяет количество. если количество больше нуля, увеличьте количество товаров в профиле магазина. Скажем, в магазине доступно 10 предметов, а поле документа об элементе было обновлено с 0 до 1 инвентарь, мне нужно будет увеличить количество предметов в магазине до 11.

Я помню, как читал в блоге firebase, что есть новая функция, которая позволяет это. Но как это сделать в облачных функциях?


person Mozes ong    schedule 01.04.2019    source источник


Ответы (1)


Вы используете эту функцию в облачных функциях через Admin SDK. Вот пример, основанный на проекте, над которым я работаю.

Сначала вы импортируете Admin SDK:

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

А затем в своей облачной функции вы увеличиваете поле примерно так:

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

Это увеличивает поле itemCount на 1.

Также см:

person Frank van Puffelen    schedule 01.04.2019
comment
const admin = require ('firebase-admin'); docRef.update ({'availableItemsCount': admin.firestore (). FieldValue.increment (1),}); ошибка: TypeError: не удается прочитать свойство «приращение» неопределенного значения в exports.setAvailableItemsCount.functions.firestore.document.onUpdate (/srv/index.js:206:74) в ‹anonymous› в process._tickDomainCallback (internal / process / next_tick .js: 229: 7) - person Mozes ong; 01.04.2019
comment
Хммм .... Я думал, что эта функция также была выпущена в Admin SDK. Дай мне проверить... - person Frank van Puffelen; 01.04.2019
comment
Он определенно доступен в firebase-admin 7.2.0 - @Mozesong, возможно, вам потребуется обновить свои зависимости. - person oodavid; 01.04.2019
comment
Разве это не должно быть admin.firestore.FieldValue, а не admin.firestore().FieldValue? - person Renaud Tarnec; 01.04.2019
comment
Спасибо, oodavid, я как-то не смог это сыграть. И спасибо Рено. Я использовал это в веб-приложении, поэтому, возможно, неправильно понял синтаксис Admin SDK. Но FieldValue является статическим классом, поэтому необходимо получить экземпляр Firestore. - person Frank van Puffelen; 01.04.2019
comment
@Mozesong: как указал Рено, он должен быть admin.firestore.FieldValue без скобок после firestore. - person Frank van Puffelen; 01.04.2019
comment
это не сработало. docRef.update ({'availableItemsCount': admin.firestore.FieldValue.increment (1),}); error: TypeError: admin.firestore.FieldValue.increment не является функцией в exports.setAvailableItemsCount.functions.firestore.document.onUpdate (/srv/index.js:201:74) в ‹anonymous› в process._tickDomainCallback (internal / process / next_tick.js: 229: 7) версия: [email protected] - person Mozes ong; 02.04.2019
comment
Я только что протестировал это на своей собственной системе, и после обновления до версии 7.2 Admin SDK admin.firestore.FieldValue.increment(1) разрешается там без проблем. Я не уверен, почему у вас это не работает. - person Frank van Puffelen; 02.04.2019
comment
В моем firestore.d.ts нет функции increment (). что мне делать? - person Mozes ong; 03.04.2019
comment
@FrankvanPuffelen Я все еще не могу увеличить - person Mozes ong; 04.04.2019
comment
Извините, @Mozesong, так как я не могу воспроизвести проблему, я мало что могу сделать, чтобы помочь. Возможно, вы захотите включить в свой вопрос MCVE. Я понимаю, что это может быть сложно, но на данный момент мы застряли в работе на одной машине, а не на другой, поэтому мне сложно помочь. - person Frank van Puffelen; 04.04.2019
comment
github.com/googleapis/nodejs-firestore/issues/ решено. Частично моя проблема, а также частично глюк обновления. - person Mozes ong; 14.04.2019
comment
Нужна ли документация в обновлении? firebase.google.com/docs/reference/admin/node/ - person wtk; 07.05.2019
comment
Да, похоже, это не актуально. Я только что зарегистрировал ошибку для. Спасибо, что отметили! - person Frank van Puffelen; 07.05.2019
comment
@FrankvanPuffelen, но поскольку облачные функции могут запускаться более одного раза за один вызов, использовать FieldValue.increment в облачных функциях всегда небезопасно, не так ли? - person dshukertjr; 22.09.2019
comment
Примечание. Обновление не будет выполнено, если оно будет применено к несуществующему документу. - person Rifat; 30.03.2021