Я хочу обновить два поля в документе в коллекции под названием recipes
, и я использовал для этого пакетное обновление:
let recipeRef = db.collection('recipes').doc(`${recipeId}`);
let batch = db.batch();
batch.update(recipeRef, {ratingsCount : admin.firestore.FieldValue.increment(1)});
batch.update(recipeRef, {totalRating : admin.firestore.FieldValue.increment(snap.data().rating)})
return batch.commit();
И у меня есть функция триггера для коллекции recipes
, например:
exports.RecipeUpdated = functions.firestore
.document('recipes/{recipeId}')
.onUpdate((change, context) =>
{
//code
});
Мой вопрос: поскольку в вышеуказанном пакете есть два обновления, будет ли это также дважды вызывать функцию onUpdate
Или, поскольку пакетная запись завершается атомарно, триггер будет вызываться только один? Я хочу, чтобы триггер вызывался только один раз.
1 ответ
Как упомянул @DougStevenson в своем комментарии, вам нужно просто запустить код и посмотреть, как это работает. Но обратите внимание: даже если вы используете один и тот же recipeRef
, вы создаете два обновления разницы в своем пакете. В этом случае результат, который вы получите, будет заключаться в том, что onUpdate()
сработает дважды.
Если вы хотите, чтобы вас вызывали только один раз, вам не следует создавать два разных обновления, вы можете создать одно. Функция update () позволяет передавать несколько свойств которые можно обновить. Если вы используете объекты, то просто получите ссылку на документ, получите его, внесите изменения и запишите обратно.
Похожие вопросы
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .