我有一个文档,其中包含一个由整数数组组成的字段,该文档每天(每周7天)通过onCreate()
触发器创建一次。我需要计算数组中每个项目的出现次数。在其他应用程序中,我先使用get()
,然后使用set()
(或update()
)。我将在数组中运行一个for循环,并将所有的Promise添加到一个Promise数组中,并在末尾:Promise.all{promisesArray}
。
刚刚发现了有关交易的信息,对于我非常基本的javascript来说就可以了。
我的问题是我应该使用哪一个?在我的情况下使用交易有什么好处?该文档是由管理员而非最终用户创建的,不是说它将由数百万个用户创建。
下面是我用来计算出现次数的代码:
// Ref.get() then Ref.update()
promisesArray.push(docRef.get()
.then(doc => {
return docRef.update('count', doc.data().count + 1);
})).catch(error => {
console.log("Error" + error);
});
// Using a Transaction
promisesArray.push(firestore.runTransaction(transaction => {
return transaction.get(docRef)
.then(doc => {
return transaction.update(docRef, {
count: doc.data().count + 1
});
});
}).catch(error => {
console.log("Error" + error);
}));
答案 0 :(得分:2)
如果您知道一个文档在任何时候都只能由一个程序编写,则不需要进行事务处理。事务的目的是处理多个用户/程序可能都试图同时编写文档的情况。或者,您需要在一次写入操作中自动更新一堆文档,以确保所有文档之间的一致性。
如果在onCreate期间仅在Cloud Function中编写单个文档,则可能不需要事务。由于某些通用计算的结果,如果您需要多个文档在同一时间全部出现,那么您可能确实需要进行事务处理。