繁体   English   中英

对firestore文档的角度firestore查询

[英]Angular firestore query to firestore document

我有以下查询

    selectedUser$: AngularFirestoreDocument<any>;
    this.selectedUser$ = this.userCollection.ref.where('uid', '==', key)

投掷错误

类型“查询”不可分配给类型“AngularFirestoreDocument”。 “查询”类型中缺少属性“参考”。

我试过了

this.selectedUser$ = this.userCollection.ref.where('uid', '==', key).get()

没有成功

基本上,我希望查询返回 firestore 文档

您得到的错误是因为您正在混合使用 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子句会更容易一些

这适用于我的最新版本:2021-7 月

this.store
    .collection("Products",ref=>ref.where("stock","==",10))
    .get()
    .subscribe(data=>data.forEach(el=>console.log(el.data())));

PS:我正在使用 get() 并且没有事件侦听器。

this.afs.collection<User>('users', ref => ref.where('uid', '==', key).limit(1))
      );

如果您添加有关 Firestore 集合结构和 typescript 文件的更多详细信息,将会更容易为您提供帮助。

但是,要查询集合,我执行以下操作:

  1. 在构造函数中定义一个私有的 AngularFirestore。

     constructor( private afStore: AngularFirestore, ) { }
  2. 定义查询并将结果传递给 AngularFirestoreDocument。

     this.selectedUser$ = this.afStore .collection('TheNameOfYourCollection').doc<any>(key);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM