您得到的错误是因为您正在混合使用 firebase 本机 api 和 angularfire。
selectedUser$: AngularFirestoreDocument<any>;
调用.ref
你的AngularFirestoreCollection
将其转换为类型firebase.firestore.CollectionReference
话虽如此,有两种可能性可以解决您的问题:
使用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);
// this.afs.doc(documentSnapshot.ref).valueChanges().subscribe(console.log);
});
}
});
这样,.where
如果需要,链接多个子句会更容易一些