AngularFire - 获取关键父orderbykey子项

时间:2017-01-23 09:26:20

标签: angularjs firebase firebase-realtime-database angularfire

这是我制作的Firebase结构:

firebase structure

我只想获得用户拥有该用户的子uid的公司的密钥。 我的语法如下:

self.companyid = $firebaseArray(firebase.database().ref('company').orderByChild('user/' + self.user_id.uid)); 
    self.companyid.$loaded(function() {
        console.log(self.companyid);
        loadProject();

    });

但是当我console.log(self.companyid)时,它会产生公司的所有对象。

1 个答案:

答案 0 :(得分:0)

$firebaseArray()函数将返回Firebase对象数组。根据提供的.ref('company'),无论user.uid如何,该数组都将包含所有您的公司对象。 .orderByChild()不会产生任何影响,因为它只是试图对你的uid进行排序,如果它存在于对象中,它将始终是相同的。

根据您的数据结构,找到您是用户的公司对象的方式,您将不得不迭代公司对象的数组和每个公司内的用户密钥进行测试以进行匹配到您的用户ID。

self.companies = $firebaseArray(firebase.database().ref('company'));
self.companies.$loaded(function() {
    self.companies.forEach(function(companyObj) {
        for (let key in companyObj.users) {
            if (key === self.user_id.uid) {
                console.log(companyObj.$id);
                self.companyid = companyObj.$id;
                loadProject();
            }
        }
    });
    self.companies.$destroy();
});

这假设数据的设计方式使得user_id只出现在单个公司对象中。

请记住$firebaseArray()返回一个与数据库有实时连接的数组。一旦你完成了数组,就应该销毁它。