你所遇到的错误是因为你同时使用了Firebase原生API和AngularFire。
selectedUser$: AngularFirestoreDocument<any>
在你的AngularFirestoreCollection
上调用.ref
将其转换为类型firebase.firestore.CollectionReference
话虽如此,有2种解决方法:
使用angularfire
:
我假设你的userCollection看起来像这样:this.afs.collection<User>
。由于你正在查询一个集合,所以无法确保你的查询断言uid == key
在firebase中是唯一的。因此,你查询该集合并使用limit()
限制结果。这将返回一个带有一个文档的数组。 flatMap()
会返回单个用户。
this.afs.collection<User>('users', ref => ref.where('uid', '==', key).limit(1))
.valueChanges()
.pipe(
flatMap(users=> users)
);
使用 firebase
原生 API:
const query = this.usersCollection.ref.where('uid', '==', key);
query.get().then(querySnapshot => {
if (querySnapshot.empty) {
console.log('no data found');
} else if (querySnapshot.size > 1) {
console.log('no unique data');
} else {
querySnapshot.forEach(documentSnapshot => {
this.selectedUser$ = this.afs.doc(documentSnapshot.ref);
});
}
});
如果需要的话,这样做可以更容易地链接多个 .where
子句。
this.selectedUser$ = this.userCollection('yourCollection', ref => ref.where('uid', '==', key) )
吗?这将在 valueChanges().subscribe() 中检索文档。 - Swoox