如何连接Firebase数据库中多个位置的数据?

如何连接Firebase数据库中多个位置的数据?,firebase,Firebase,我有一个与用户X关联的通知ID索引。当我想显示这些通知时,我需要从用户X的通知索引中获取它们,该索引只包含 a) 通知的id(nid) b) 状态:“已读/未读” 但我也需要去 a) /notifications/nid获取我的通知数据:text和fromUser b) /users/fromUser以获取该用户的用户数据 我的问题是关于结构 我的数据结构是否正确?如果正确,我如何获取通知中的所有信息,并在准备就绪时将其呈现给angular,以便在屏幕上显示 下面是我对此的看法。欢迎任何评论(代

我有一个与用户X关联的通知ID索引。当我想显示这些通知时,我需要从用户X的通知索引中获取它们,该索引只包含

a) 通知的id(nid)

b) 状态:“已读/未读”

但我也需要去

a) /notifications/nid获取我的通知数据:text和fromUser

b) /users/fromUser以获取该用户的用户数据

我的问题是关于结构

我的数据结构是否正确?如果正确,我如何获取通知中的所有信息,并在准备就绪时将其呈现给angular,以便在屏幕上显示

下面是我对此的看法。欢迎任何评论(代码/结构/任何内容)。谢谢

附言。 另外,如果我用通知实例替换firebaseArray中的POJO,当我说编辑通知并将其保存回Firebase时,这将如何影响我的DB。AngularFire如何知道要挽救什么

/* Notifications */

.factory('Notifications', function(firebaseUrl, NotificationsFactory){
  var ref = new Firebase(firebaseUrl);

  return {
    getNotificationsForUser : function(uid){
      var userNotifRef = ref.child('users').child(uid).child('notifications');
      return new NotificationsFactory(userNotifRef);
    }
  }
})

.factory('NotificationsFactory', function($firebaseArray, Notification) {
  return $firebaseArray.extend({
    $$added : function(snapshot, prevChild){ //called anytime a 'child_added' event occurs
      return new Notification(snapshot);
    }
  })
})

.factory('Notification', function(firebaseUrl, $q, Users) {
  var notifRef = (new Firebase(firebaseUrl)).child('notifications');
  var usersRef = (new Firebase(firebaseUrl)).child('users');

  var mainDeferred = $q.defer();
  var notifDeferred = $q.defer();
  var userDeferred = $q.defer();

  var Notification = function(snapshot){
    this.$id = snapshot.key();
    this.status = snapshot.val().status;
    this.message = null;
    this.from = null;
    this.to = null;

    notifRef.child(this.$id).once('value', function(snap){ //change to on if expect notification to keep updating
      var data = snap.val();
      this.message = data.message;
      this.from = data.from; //user id
      this.to = data.to; //user id
      notifDeferred.resolve();
    });

    notifDeferred.promise.then(function(){
      this.from = Users.getUser(this.from);
      this.to = Users.getUser(this.to);
      this.from.$loaded().then(function(){
        this.to.$loaded().then(function(){
          mainDeferred.resolve();
        })
      })
    })
  };

  Notification.prototype.ready = function(){
    return mainDeferred.promise;
  }

  return Notification;
})

签出的NormalizedCollection,它可以使加入变得更容易。是否有任何约束阻止您仅按uid存储通知列表?总的口号是努力写作,使阅读变得容易。这似乎正好相反。谢谢,firebase util的NormalizedCollection很有魅力!