如何在Firebase Cloud Firestore中获取文档ID以编辑文档
Cloud Firestore文档ID获取与编辑指南
Firebase Cloud Firestore会自动为每个新增文档生成唯一ID,不需要额外新建表指定ID,直接用系统生成的ID即可满足编辑需求。
你用component.id返回undefined的原因是:文档ID不属于文档数据本身的字段,它是文档引用/快照的属性,不会包含在doc.data()返回的对象里。以下是不同场景下获取文档ID的方法:
1. 新增文档时获取ID
方式一:先生成文档引用再存数据
可以提前拿到自动生成的ID,再写入数据:
// 生成文档引用,此时已自动分配ID const docRef = db.collection('components').doc(); const docId = docRef.id; // 直接获取ID // 写入文档数据 await docRef.set({ name: "示例组件", // 其他业务字段 });
方式二:用add()方法新增后取ID
add()方法会返回包含文档引用的Promise,从引用中提取ID:
const docRef = await db.collection('components').add({ name: "示例组件", // 其他业务字段 }); const docId = docRef.id;
2. 查询/读取文档时获取ID
单个文档查询
获取指定文档时,从文档快照中提取ID,并可以和数据合并成包含ID的对象:
const docSnap = await db.collection('components').doc('目标文档ID').get(); if (docSnap.exists()) { const component = { id: docSnap.id, // 提取ID ...docSnap.data() // 合并文档数据 }; // 此时component.id就能正常访问了 }
批量查询集合文档
遍历查询快照的docs数组,为每个文档数据添加ID属性:
const querySnapshot = await db.collection('components').get(); const components = querySnapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })); // components数组中的每个元素都包含id属性
3. 用ID编辑文档
拿到文档ID后,直接通过文档引用调用update()方法修改内容即可:
const targetDocId = "获取到的文档ID"; await db.collection('components').doc(targetDocId).update({ name: "更新后的组件名称", // 其他需要修改的字段 });
内容的提问来源于stack exchange,提问作者MrJonesBones
相关产品推荐
相关产品推荐

