Web v9版本Firestore如何按where条件删除集合文档,deleteDoc应传什么参数
报错根因
deleteDoc 方法要求传入的参数是 Firebase 文档引用对象(DocumentReference),而非单纯的文档ID字符串。你直接传入 doc.id 时,方法内部尝试读取引用对象的内置属性 _delegate 失败,就会抛出你遇到的报错。
另外你提供的代码片段还缺少执行查询获取快照的逻辑,没有这一步的话 myCollectionSnapshot 本身就是未定义的,也会触发异常。
正确实现代码
// 注意提前引入需要的Firebase SDK方法 import { collection, query, where, getDocs, deleteDoc, doc } from "firebase/firestore"; const myCollection = collection(db, 'myCollection'); const mycollectionQuery = query(myCollection, where("field1", "==", "xyz")); // 执行查询获取文档快照,注意异步方法要加await const myCollectionSnapshot = await getDocs(mycollectionQuery); myCollectionSnapshot.forEach((docSnapshot) => { // 写法1:自行构造文档引用对象传入 deleteDoc(doc(db, 'myCollection', docSnapshot.id)); // 写法2:直接使用快照自带的引用属性,更简洁 // deleteDoc(docSnapshot.ref); });
参数说明
- 两种传参方式都符合
deleteDoc的入参要求,选任意一种即可 - 禁止直接传入字符串类型的文档ID作为参数
内容的提问来源于stack exchange,提问作者MartinJ
相关产品推荐
相关产品推荐

