如何使用Angular在Firebase中使用WHERE函数?

如何使用Angular在Firebase中使用WHERE函数?,angular,typescript,firebase,ionic-framework,google-cloud-firestore,Angular,Typescript,Firebase,Ionic Framework,Google Cloud Firestore,实际目标: 用户可以在组织组中发布,在该组织组中发布的帖子在其他组织组中不得可见,因此我尝试使用Firebase中的WHERE函数来过滤帖子列表 用户制作的每篇文章将在Firestore中保存组织组ID(创建文章的位置)。因此,当我过滤帖子列表时,我可以使用组织组ID(postOrgId)来过滤每个组织组中的特定帖子 我想我在让用户使用激活的路由查看组织ID时遇到了问题 图1:组织ID 我尝试以下方法 我尝试使用激活路由,因为它将保存用户查看的当前组织组ID,但不幸的是Firebase抛出了一

实际目标:

  • 用户可以在组织组中发布,在该组织组中发布的帖子在其他组织组中不得可见,因此我尝试使用Firebase中的WHERE函数来过滤帖子列表
  • 用户制作的每篇文章将在Firestore中保存组织组ID(创建文章的位置)。因此,当我过滤帖子列表时,我可以使用组织组ID(postOrgId)来过滤每个组织组中的特定帖子
  • 我想我在让用户使用激活的路由查看组织ID时遇到了问题

    图1:组织ID

    我尝试以下方法

  • 我尝试使用激活路由,因为它将保存用户查看的当前组织组ID,但不幸的是Firebase抛出了一个错误

  • 我创建了一个获取当前组织ID的方法

  • 图2:Firebase抛出一个错误

    这是组织组(org home.ts)

    这是邮政服务(Post.Service.ts)

    出口类邮政服务{
    邮政编码:AngularFirestoreCollection;
    博士后:AngularFirestoreDocument;
    职位:可观察;
    岗位:可观察;
    邮政$:任何;
    原形:可见;
    建造师(
    私人afs:AngularFirestore
    ) {
    this.postCol=this.afs.collection('post',ref=>ref.orderBy(“createdAt”,“desc”));
    //组织组ID将在此处传递给WHERE子句
    this.postCol=this.afs.collection('post',ref=>ref.where('postOrgId',“==”,this.orgId));
    this.posts=this.postCol.snapshotChanges().pipe(
    映射(操作=>{
    returnaction.map(a=>{
    const data=a.payload.doc.data()作为Post;
    data.postId=a.payload.doc.id;
    返回数据;
    })
    })
    );
    }//
    //发帖
    getPosts(){
    把这封信寄回去;
    }
    //它将获得组织ID
    getOrgId(idParameter):可观察{
    返回this.orgId=this.afs.collection('post',result=>result.where('postOrgId','=',idParameter)).valueChanges();
    }
    
    当我使用Angular和Firebase时,我会这样做:

    constructor(private afs: AngularFirestore){}
    
    someFunction(idParameter): Observable<any>{
     return this.afs.collection('Collection', result => result.where('fieldThatContainsTheId', '==', idParameter)).valueCahnges();
    }
    
    构造函数(专用afs:AngularFirestore){}
    someFunction(idParameter):可观察{
    返回此.afs.collection('collection',result=>result.where('fieldthatcontainstId','=',idParameter)).valueCahnges();
    }
    
    您能否确保
    this.orgID
    已在我的post service中定义/此.orgID未被读取,因此我想我在获取用户查看的当前组织ID时遇到了问题。我可以将此放置在哪里,先生,放置在我的post service中?是的,将其放置在您的post service中并从您的组件调用。这是我在检索文档时的方式rom Firestore collections。我尝试了您所说的,先生,但不幸的是,错误仍然存在。我将发布更新的代码。
    export class PostService {
      postCol: AngularFirestoreCollection<Post>;
      postDoc: AngularFirestoreDocument<Post>;
      posts: Observable<Post[]>;
      post: Observable<Post>;
    
      post$: any;
    
      orgId: Observable<any>;
    
      constructor(
        private afs: AngularFirestore
        ) {
    
    
        this.postCol = this.afs.collection('post', ref => ref.orderBy("createdAt", "desc"));
    
        //Organization Group ID will be passed here to the WHERE Clause
        this.postCol = this.afs.collection('post', ref => ref.where("postOrgId", "==", this.orgId));
    
        this.posts = this.postCol.snapshotChanges().pipe(
          map(action => {
            return action.map(a => {
              const data = a.payload.doc.data() as Post;
              data.postId = a.payload.doc.id;
              return data;
            })
          })
        );
       }//
    
       //Gets all post
       getPosts() {
         return this.posts;
       }
    
       //It will get the Organization ID
       getOrgId(idParameter): Observable<any>{
        return this.orgId = this.afs.collection('post', result => result.where('postOrgId', '==', idParameter)).valueChanges();
       }
    
    constructor(private afs: AngularFirestore){}
    
    someFunction(idParameter): Observable<any>{
     return this.afs.collection('Collection', result => result.where('fieldThatContainsTheId', '==', idParameter)).valueCahnges();
    }