runTransaction: Provided document reference is from a different Firestore instance 错误

runTransaction: Provided document reference is from a different Firestore instance error

我正在尝试通过 实现更易于阅读的文档 ID,但我 运行 遇到了一个我无法修复的错误。

我可以从 COUNTER 文档中成功读取 highestCount 的值,但是当我尝试更新它时出现错误。

错误状态:

FirebaseError: Provided document reference is from a different Firestore instance

我的 Javascript 代码(使用 React):

const onSetCreation = async (e) => {
        e.preventDefault();
        var setNo = 0;
        try {
            await runTransaction(db, async (transaction) => {
                const currentSetNo = await transaction.get(
                    doc(db, "users", userStatus.uid, "set", "COUNTER")
                );
                console.log(currentSetNo.data());

                // if theres no counter, create one
                if (!currentSetNo.exists()) {
                    transaction.update({ highestCount: 0 });
                    setNo = 0;
                } else {
                    setNo = currentSetNo.data().highestCount + 1;
                    // update the COUNTER once iterated
                    transaction.update(currentSetNo, { highestCount: setNo });
                }
            });
            // succesful update of COUNTER
            console.log("Transaction successfully committed!");
        } catch (e) {
            console.log(e);
        }
    };

点击按钮触发此函数。

我的 Firestore 结构

是用户 -> [userid] -> 设置 -> COUNTER

其中 counter 是一个包含 highestCount 的文档,每次此函数 运行s 时都会更新。

我可以 console.log COUNTER 的值,只是无法更新它。

我没能找到任何类似的问题。

我正在使用 Firestore 的 Web 版本 9,我已阅读 this documentation 的 运行Transaction。

干杯

好的,所以我发现了错误。我在这一行中使用了错误的参考:

transaction.update(currentSetNo, { highestCount: setNo });

实际上应该是

transaction.update(
                    doc(db, "users", userStatus.uid, "set", "COUNTER"),
                        { highestCount: setNo }
                    );

或者无论您的数据库引用是什么,都可以替换第一个示例中的 currentSetNo。