我正在try 使用updateDoc方法从文档中的数组中删除数组元素,因此我需要文档引用,但我不知道如何获取它,因为它是由Firebase生成的,文档或过go 的问题没有帮助.

   const subjectRef = collection(db, "users", auth.currentUser.uid, "subjects");
const querySnapshot = await getDocs(subjectRef);

subjects.forEach(subject => {
    querySnapshot.forEach((doc) => {
      if(doc.data().Subject == subject) {
        const subject = doc.data();
        const subjectName = subject.Subject;
        const topics = subject.Topics;
        //iterates through the topics of the subjects
        globalTopicList.forEach(obj => {
          topics.forEach(async topic => {
            if(obj[1]==topic.id) {
              const temp = {
                Topic: topic.Topic,
                Days: 0,
                Rating: topic.Rating,
                id: topic.id,
              };
              await updateDoc(docRef, {
                Topics: arrayRemove(topic.id)
              });
              console.log('done');
            }
          });
        });
      }
    });
  });
  

推荐答案

每个QueryDocumentSnapshot都有一个.ref属性,即该文档的DocumentReference:

const updates = [];
querySnapshot.forEach((doc) => {
  const docRef = doc.ref
  
  updates.push(updateDoc(docRef, {...updatedData}))
})

return Promise.all(updates).then(() => {
  console.log("Documents updated")
}).catch((e) => console.log(e))

如果要更新的文档少于500个,则可以使用Batched Write:

import { writeBatch, doc } from "firebase/firestore"; 

const batch = writeBatch(db);

querySnapshot.forEach((doc) => {
  const docRef = doc.ref
  
  batch.update(docRef, {...updatedData}))
})

// Commit the batch
await batch.commit();

Javascript相关问答推荐

在Chart.js 4.4.2中移动到不同大小的容器时,图表不会调整大小

使用ReactJS对Ant Design表中的空值进行排序

如何通过在提交时工作的函数显示dom元素?

react/redux中的formData在expressjs中返回未定义的req.params.id

InDesign—创建一个独立的窗口,在文档中进行更正时保持打开状态

有没有可能使滑动img动画以更快的速度连续?

在服务器上放置了Create Reaction App Build之后的空白页面

setcallback是什么时候放到macrotask队列上的?

虚拟滚动实现使向下滚动可滚动到末尾

如何在ASP.NET中使用Google Charts API JavaScript将条形图标签显示为绝对值而不是负值

覆盖TypeScrip中的Lit-Element子类的属性类型

如何使用TypeScrip设置唯一属性?

VSCode中出现随机行

变量在导入到Vite中的另一个js文件时成为常量.

FireBase云函数-函数外部的ENV变量

在验证和提交表单后使用useNavigate()进行react 重定向,使用带有加载器和操作的路由

将嵌套数组的元素乘以其深度,输出一个和

如何使本地html页面在重新加载时保持当前可隐藏部分的打开状态?

如何使用画布在另一个内部绘制一个较小但相同的形状,同时保持恒定的边界厚度?

FireBase FiRestore安全规则-嵌套对象的MapDiff