我在下面查询
selectedUser$: AngularFirestoreDocument<any>;
this.selectedUser$ = this.userCollection.ref.where('uid', '==', key)
投掷错误
类型'查询'不能分配给类型 'AngularFirestoreDocument'。类型中缺少属性“ ref” “查询”。
我尝试过
this.selectedUser$ = this.userCollection.ref.where('uid', '==', key).get()
没有成功
基本上,我希望查询返回Firestore文档
答案 0 :(得分:1)
您得到的错误是因为您正在混合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
子句会容易一些
答案 1 :(得分:1)
这对我来说适用于最新版本:2021 年 7 月
this.store
.collection("Products",ref=>ref.where("stock","==",10))
.get()
.subscribe(data=>data.forEach(el=>console.log(el.data())));
PS:我使用的是 get() 而没有事件监听器。
答案 2 :(得分:-1)
如果您添加有关Firestore集合和打字稿文件的结构的更多详细信息,将为您提供帮助。
但是,要查询集合,请执行以下操作:
在构造函数中定义一个私有AngularFirestore。
constructor(
private afStore: AngularFirestore,
)
{
}
定义查询并将结果传递到AngularFirestoreDocument。
this.selectedUser$ = this.afStore
.collection('TheNameOfYourCollection').doc<any>(key);