获取与特定UID相关的所有Firebase数据

时间:2018-10-16 22:24:17

标签: javascript firebase firebase-realtime-database angularfire2

我的Firebase设置有些复杂,我想知道是否有可能在一次呼叫中获得与特定用户关联的数据的 all

我的Firebase模式如下图所示:

enter image description here

到目前为止,我已经做了类似的事情,但我认为必须有更好的方法(例如使用UID来获取数据,而不是手动解析整个db对象)

export class AdminComponent {
  items: FirebaseListObservable<any[]>;
  private xyz: string;
  private firebaseList: FirebaseListObservable<any[]>;

  constructor(db: AngularFireDatabase, private router: Router, private route: ActivatedRoute) {
    this.firebaseList = db.list('/');
    this.items = this.firebaseList.subscribe(items => {
      const dbAnalytics = items[0];
      const dbBookings = items[1];
      const dbClasses = items[2];
      const dbLabs = items[3];
      const dbMachines = items[4];
      const dbPostLabs = items[5];
      const dbPreLabs = items[6];
      const dbUsers = items[7];

      for (const key in dbUsers) {
        if (dbUsers.hasOwnProperty(key)) {
         const userData = dbUsers[key];
         const userEid = userData['eid'];
         const userFullName = userData['name'];
         console.log(userEid, userFullName);
        }
      }

      for (const key in dbPostLabs) {
        if (dbPostLabs.hasOwnProperty(key)) {
          const postLabData = dbPostLabs[key];
          // Figure out why these objects are weird
        }
      }

    });

  }

}

感谢所有建议。

1 个答案:

答案 0 :(得分:1)

我假设您只想从数据库中获取一个对象,而不是获取所有对象,因此您可以执行以下操作。此外,如果我能看到扩展后的数据看起来更容易回答

如果您已经知道对象的uid,则可以执行类似的操作

this.db.database.ref(`labs/${uid}`).once('value')

或者如果您只想要其中一个对象的完整列表

this.db.list('labs/', ref => ref.orderByChild(<object key>).equalTo(<desired key value)).valueChanges();

希望这会有所帮助。如果这不是您所需要的,那么如果数据得到扩展,我可能会再次做出更好的回答。