【问题标题】:Firestore Cloud Function. transaction vs get() => update()Firestore 云功能。交易 vs get() => update()
【发布时间】:2018-10-25 23:45:27
【问题描述】:

我有一个包含整数数组字段的文档,该文档每周 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);
}));

【问题讨论】:

    标签: node.js firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    如果您知道一个文档在任何时候都只能由一个程序编写,那么您就不需要事务。事务的目的是处理多个用户/程序可能都试图同时编写文档的情况。或者,您需要在一次写入操作中自动更新一堆文档,以确保所有文档之间的一致性。

    如果您在 onCreate 期间仅在 Cloud Function 中编写单个文档,那么您可能不需要事务。如果您需要多个文档在完全相同的时间出现,作为一些常见计算的结果,那么您可能确实需要一个事务。

    【讨论】:

    • 我将从该触发器中写入多达 25 个文档,但它每天只会发生一次。现在我对交易(y)有了更清晰的认识
    猜你喜欢
    • 2018-05-09
    • 2022-12-20
    • 1970-01-01
    • 2018-05-24
    • 2018-10-24
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多