Angular2+中Firebase如何按uid查询单条记录并保留原始key
问题原因说明
你现有代码的用法不符合AngularFire的API调用逻辑:
valueChanges()方法的入参不是文档ID,该方法接收的是配置项参数,直接传入this.selectedId不会生效,所以你拿到的是profiles集合下的全量文档数据,自然返回全量数组,数组自带的下标就是你看到的0、1、2序号。
疑问1:如何只返回查询到的目标单条记录
要查询集合下指定ID的单条文档,需要先拿到单文档的引用,而不是查询整个集合,正确代码如下:
// 写法1:直接构造单文档路径 const profileRef = this.afs.doc<any>(`profiles/${this.selectedId}`); // 写法2:从集合引用下取指定ID的文档 // const profileRef = this.afs.collection('profiles').doc(this.selectedId); profileRef.valueChanges().subscribe(profile => { console.log("目标单条记录:", profile); });
疑问2:如何保留记录的原始key(文档ID)
调用valueChanges()时传入idField配置项,即可把文档的原始ID映射到返回对象的指定字段中,不会再出现数组序号的问题:
const profileRef = this.afs.doc<any>(`profiles/${this.selectedId}`); // 配置idField为uid,返回的对象中就会新增uid字段存储原始文档ID profileRef.valueChanges({ idField: 'uid' }).subscribe(profile => { console.log("带原始ID的单条记录:", profile); });
如果是多文档查询场景,同样可以在集合的valueChanges()中传入idField配置,返回的数组中每个对象都会携带原始文档ID:
// 多文档查询保留ID示例 this.afs.collection('profiles', ref => ref.where('age', '>', 18)) .valueChanges({ idField: 'uid' }) .subscribe(profiles => { // 数组内每个对象都带uid字段存原始文档ID })
内容的提问来源于stack exchange,提问作者J.k
相关产品推荐
相关产品推荐

