You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中使用Firebase getDocs获取并更新文档的错误问题排查

解决Firebase Firestore文档查询与更新的错误问题

咱们逐个拆解你遇到的两个错误,以及对应的修复方案:

第一个代码的问题与修复

你的第一段代码存在两个核心问题:

  1. 变量作用域失效:idDoc是在forEach循环内部定义的,外部的then回调根本访问不到它,导致updateDoc里的文档引用缺少合法ID,触发了Invalid document reference错误(因为合法的文档引用格式是集合名/文档ID,缺少ID就只有1个路径段)。
  2. Promise链式调用写法错误:第二个then里直接执行了updateDoc,而不是传递一个函数。这会导致updateDoc在getDocs还没完成查询就提前执行,进一步加剧了文档引用的问题。

修复后的代码:

const docQuery = query(collection(database, "user_veic"),
  where("email", "==", auth.currentUser?.email),
  where("kmF", "==", ""));

getDocs(docQuery).then((querySnapshot) => {
  // 直接在循环内处理更新,避免作用域问题
  querySnapshot.forEach((docSnap) => {
    console.log(`${docSnap.id} => ${JSON.stringify(docSnap.data())}`);
    updateDoc(doc(database, "user_veic", docSnap.id), {
      kmF: "teste1",
      km: "teste1",
    })
    .then(() => console.log("文档更新成功"))
    .catch(err => console.error("更新失败:", err));
  });
})
.catch(err => console.error("查询失败:", err));

第二个代码的问题与修复

这段代码的关键错误是变量名冲突:在forEach循环里,你把文档快照命名为doc,但doc同时也是你从Firebase Firestore导入的「创建文档引用」的函数。这就导致你调用doc(database, "user_veic", doc.id)时,doc指的是当前的文档快照对象,而不是Firebase的doc函数,所以报错doc is not a function。

修复方法很简单,给文档快照换个变量名(比如docSnap),避免和Firebase的函数重名:

const docQuery = query(collection(database, "user_veic"),
  where("email", "==", auth.currentUser?.email),
  where("kmF", "==", ""));

getDocs(docQuery).then((querySnapshot) => {
  querySnapshot.forEach((docSnap) => { // 这里把doc改成docSnap
    console.log(`${docSnap.id} => ${JSON.stringify(docSnap.data())}`);
    // 现在doc是Firebase的函数,正常创建文档引用
    const docRef = doc(database, "user_veic", docSnap.id);
    updateDoc(docRef, {
      kmF: "teste1",
      km: "teste1",
    })
    .then(() => console.log("文档更新成功"))
    .catch(err => console.error("更新失败:", err));
  });
})
.catch(err => console.error("查询失败:", err));

额外提示

  • 记得添加catch回调处理Promise错误,避免出现未处理的Promise拒绝。
  • 如果你的查询逻辑只会返回单个文档,可以用getDoc配合查询,或者直接通过已知文档ID创建引用,这样不需要遍历快照集合。

内容的提问来源于stack exchange,提问作者Mares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 14:47:42