Angular Firestore技术问题:如何获取不含文档键的文档数据
解决Angular Firestore获取Group数据不含ID的问题
我来帮你搞定这个问题~其实Firestore获取数据时分离ID和文档内容很简单,分两种情况来处理:
情况1:文档数据本身没有存储ID字段
Firestore文档的ID是存在文档元数据里的,并不是文档数据的一部分。当你获取文档快照后,用snapshot.data()就能直接拿到不含ID的文档内容:
// 假设你要获取某个指定ID的group文档 const groupDocRef = this.firestore.collection('groups').doc('你的groupID'); groupDocRef.get().subscribe((snapshot) => { if (snapshot.exists) { // 这里的groupData就是不含ID的文档数据 const groupData = snapshot.data() as IGroup; // 接下来你可以用这个groupData做后续操作,比如传给save函数前的处理 } });
情况2:文档数据中自己存储了ID字段
如果创建文档时你把ID也存在了文档的id字段里,那可以用ES6的解构赋值快速剔除这个字段:
groupDocRef.get().subscribe((snapshot) => { if (snapshot.exists) { const groupData = snapshot.data() as IGroup; // 解构剔除id字段,得到不含ID的对象 const { id, ...groupWithoutId } = groupData; // groupWithoutId就是你需要的不含ID的数据 } });
批量获取集合数据时的处理
如果你是从groups集合批量获取数据,用valueChanges()方法默认就不会返回文档ID,直接拿到纯数据:
this.firestore.collection('groups').valueChanges().subscribe((groups: IGroup[]) => { // 这里的groups数组里每个对象都不含ID });
如果用的是snapshotChanges()(会包含文档元数据),同样可以只取文档数据部分:
this.firestore.collection('groups').snapshotChanges().subscribe(actions => { const groupsWithoutIds = actions.map(action => { // 只取文档的实际数据,不含ID return action.payload.doc.data() as IGroup; }); });
这样你在调用save函数之前,就能轻松拿到不含ID的group数据啦~
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

