簡體   English   中英

onWrite 聚合函數

[英]onWrite Aggregate Function

在我非常簡單的應用程序中,每次添加/更改/刪除新事務時,我都會保留一個正在運行的聚合。 我意識到我每次都可以簡單地遍歷每個事務,但這似乎很昂貴。 因此,我打開事件類型並應用不同的邏輯,具體取決於它是否是創建/更新/刪除。

exports.aggregateTransactions = functions.firestore
    .document('budgets/{budgetId}/transactions/{transactionId}')
    .onWrite(async (change, context) => {

adjustment = 0;

if(change.after.data == undefined){ 
    adjustment = -1 * change.before.data().amount;
  }
  
  if(change.before.data && change.after.data){ 
    adjustment = change.after.data().amount - change.before.data().amount;

  }
  
  if(!change.before.data && change.after.data){ 
    adjustment = change.after.data().amount;
  }

      const budgetRef = db.collection('budgets').doc(context.params.budgetId);

      await db.runTransaction(async (transaction) => {
        const budgetDoc = await transaction.get(budgetRef);
        const newBalance = budgetDoc.data().balance + adjustment;
        transaction.update(budgetRef, {
          balance: newBalance
        });
      });
    });

這感覺就像每次都有很多代碼只是為了弄清楚正在發生什么樣的事件。 有沒有更好的方法來處理這個問題?

大多數代碼在我看來都很好。 我只是使用FieldValue.increment()操作來更新預算,而不是交易:

const budgetRef = db.collection('budgets').doc(context.params.budgetId);

budgetRef.update({ balance: admin.firestore.FieldValue.increment(adjustment) });

有關此操作的更多信息,請參閱有關遞增數值的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM