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。
我正在尝试通过
我可以从 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。