角度Firestore查询到Firestore文档

时间:2018-08-29 06:55:16

标签: angular google-cloud-firestore angularfire2

我在下面查询

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

投掷错误

  

类型'查询'不能分配给类型   'AngularFirestoreDocument'。类型中缺少属性“ ref”   “查询”。

我尝试过

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

没有成功

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

3 个答案:

答案 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集合和打字稿文件的结构的更多详细信息,将为您提供帮助。

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

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

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

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