AngularFire2使用其他firebase表中的外键进行查询、联接或筛选

AngularFire2使用其他firebase表中的外键进行查询、联接或筛选,firebase,firebase-realtime-database,firebase-storage,angularfire2,Firebase,Firebase Realtime Database,Firebase Storage,Angularfire2,我有这个firebase数据结构 { members: { m1: { lastName: "smith", firstName: "john" }, m2: { lastName: "abc", firstName: "mike" } }, userFavs: { u1: { m1:true }, u2: { m2:true } } } 在我的服

我有这个firebase数据结构

{
  members: {
    m1: {
     lastName: "smith",
     firstName: "john"
    },
    m2: {
     lastName: "abc",
     firstName: "mike"
    }
  },
  userFavs: {
    u1: {
       m1:true
    },
    u2: {
       m2:true
    }
  }
}
在我的服务中,我有以下方法:

  getMembers(): FirebaseListObservable<any[]> {
    return this.af.database.list('/members',{
      query: {
        orderByChild: 'firstName'
      }
    });
  }
搜索成员的工作正常。现在我在搜索栏下方添加了两个按钮,All收藏夹。用户可以在其收藏夹中添加成员。在搜索中,应用程序需要能够使用用户收藏夹中存在的成员密钥筛选结果


如何添加userFavs节点中存在的成员密钥的附加筛选器?

我通过获取userFavs密钥数组添加了附加筛选器。因此,在我的用户服务中,我有一个方法:

  getUserFavKeys(){
    let favKeys = [];
    const userKey = this.authService.getActiveUser().uid;
    let url = `/userCircles/${userKey}`;
    this.af.database.list(url, { preserveSnapshot: true})
      .subscribe(itemKeys=>{
        itemKeys.forEach(itemKey => {
          //console.log(itemKey.key);
          favKeys.push(itemKey.key);
        });
      })
    return favKeys;
  }
然后在component
ngOnInit
方法中,我初始化了密钥数组:

this.favKeys = this.userSvc.getUserFavKeys();
选择圆时:

onCirclesSelected(){
    this.searching = false;
    this.members = this.membersSvc.getMembers()
        .map((members) =>
            members.filter(member => this.userCircles.indexOf(member.$key) !== -1)
        );

    if (this.searchTerm == null || this.searchTerm == ''){
            //do nothing
    }else{
        //filter w the search text
        this.members = this.members
            .map((members) =>
                members.filter(member => member.lastName.toLowerCase().indexOf(this.searchTerm.toLowerCase()) !== -1 || member.firstName.toLowerCase().indexOf(this.searchTerm.toLowerCase()) !== -1));
    }
}

希望这对任何需要相同搜索功能的人都有帮助。

您在这里似乎没有提出问题或出现错误。@Kato谢谢!我用问题更新了它。让url=
/userCircles/${userKey}
;这是否必须与一个函数绑定?您能否详细说明您的问题?ThnxUserKey是一个动态值,对吗?这就是你们在不同路径之间切换的方式,我正在努力找到一条动态路径的最佳方式。是的。再看看那段代码,我可以写为
let url=`/userCircles/${this.authService.getActiveUser().uid}`
以避免使用
const userKey
声明。我在离线librabry中尝试了这一点,但一直失败。它不会接受的,你用过那个包装纸吗?
onCirclesSelected(){
    this.searching = false;
    this.members = this.membersSvc.getMembers()
        .map((members) =>
            members.filter(member => this.userCircles.indexOf(member.$key) !== -1)
        );

    if (this.searchTerm == null || this.searchTerm == ''){
            //do nothing
    }else{
        //filter w the search text
        this.members = this.members
            .map((members) =>
                members.filter(member => member.lastName.toLowerCase().indexOf(this.searchTerm.toLowerCase()) !== -1 || member.firstName.toLowerCase().indexOf(this.searchTerm.toLowerCase()) !== -1));
    }
}