node.js - Node js Firestore事务中的多个文档读取

标签 node.js firebase google-cloud-firestore firebase-admin

我想执行一个交易,需要使用这些文档的先前值更新两个文档。

为了这个问题,我正在尝试将 100 个 token 从一个应用程序用户转移到另一个应用程序用户。此操作必须是原子操作以保持我的数据库的数据完整性,因此在服务器端我虽然使用 admin.firestore().runTransaction

据我所知,runTransaction 需要在执行写入之前执行所有读取,那么如何在更新数据之前读取两个用户的余额?

这是我目前所拥有的:

db = admin.firestore();
const user1Ref = db.collection('users').doc(user1Id);
const user2Ref = db.collection('users').doc(user2Id);
transaction = db.runTransaction(t => {
    return t.get(user1Ref).then(user1Snap => {
        const user1Balance = user1Snap.data().balance;
        // Somehow get the second user's balance (user2Balance)
        t.update(user1Ref , {balance: user1Balance - 100});
        t.update(user2Ref , {balance: user2Balance + 100});
        return Promise.resolve('Transferred 100 tokens from ' + user1Id + ' to ' + user2Id);
    });
}).then(result => {
    console.log('Transaction success', result);
});

最佳答案

关于node.js - Node js Firestore事务中的多个文档读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50350570/

相关文章:

firebase - Firestore 安全规则 : understanding match/databases/{database}/documents

javascript - 如何使用 Node.js 在 http 请求后进行阻塞

javascript - 使用 Node.js 进行依赖注入(inject)

javascript - 为什么 Azure 服务器响应错误请求?

android - Firebase 检索/读取返回空值 - Android

javascript - NodeJS API 函数的范围 - Firebase 函数和 Twitter API

firebase - 如何在 flutter 中使用分页显示 listview.builder 中的原生广告?

javascript - NodeJs 和 nodemailer - 隐藏电子邮件链接和 URL 中的查询参数?

android - 如何从 Android 上的 Firebase 中的特定节点检索所有子数据?

android - 如何在用户选择项目时获取 recyclerview 中项目的 ID