使用firebase、angularFire获取非规范化数据

使用firebase、angularFire获取非规范化数据,firebase,angularfire,firebasesimplelogin,denormalized,Firebase,Angularfire,Firebasesimplelogin,Denormalized,我试图获取属于某个用户的所有flowers数据,在本例中是simplelogin:69 我首先从用户获取所有花键开始,如下所示: /users/simplelogin:69/flowers/ var ref = new Firebase("https://URL.firebaseio.com/users/"+uid+"/flowers"); var sync = $firebase(ref); 现在我一直在想一个干净的方法来获取所有的花数据,通过循环通过simplelogin:69中的每个花

我试图获取属于某个用户的所有flowers数据,在本例中是simplelogin:69

我首先从用户获取所有花键开始,如下所示:

/users/simplelogin:69/flowers/

var ref = new Firebase("https://URL.firebaseio.com/users/"+uid+"/flowers");
var sync = $firebase(ref);
现在我一直在想一个干净的方法来获取所有的花数据,通过循环通过simplelogin:69中的每个花键,而不是循环通过下面例子中的每个键,我只有三个花键,但在生产中我可能有10k

我尝试了FirebaseIndex和firebase util,但无法使其正常工作。有人有什么建议吗?我在stack上读过以前的文章,但大多数似乎已经过时,或者不太适合我的目标。会非常感激任何可以用AngularFire解决的问题

亲切问候,, 埃利亚斯


这对Firebase来说确实是一个棘手的问题。如果您为用户的花卉列表实现了一个新的应用程序,您可以在列表更改时动态请求新的花卉数据。

这对于Firebase来说确实是一个棘手的问题。如果您为用户的花卉列表实现了一个新的应用程序,您可以在列表更改时动态请求新的花卉数据。

现在就可以使用了,这要感谢@Kato在线程中的回答: 在创建此线程之前尝试过,但没有成功,所以做了一些小改动,现在可以正常工作了

针对任何在相同情况下存根的人发布解决方案:

$scope.flowers = {};

var flowerRef = new Firebase('https://URL.firebaseio.com/flowers/');
var keyRef = new Firebase('https://URL.firebaseio.com/users/'+checkAuth.auth.uid+'/flowers');

keyRef.on('child_added', function(snap) {
    var flowerId = snap.key();
    flowerRef.child(flowerId).on('value', function(snap) {
        $timeout(function() {
           if( snap.val() === null ) {
              delete $scope.flowers[flowerId];
           }
           else {
              $scope.flowers[flowerId] = snap.val();
           }
        });
    });
});

keyRef.on('child_removed', function(snap) {
    var flowerId = snap.key();
    $timeout(function(snap) {
        delete $scope.flowers[flowerId];
    });
});

感谢@Kato在线程中的回答,现在它开始工作了: 在创建此线程之前尝试过,但没有成功,所以做了一些小改动,现在可以正常工作了

针对任何在相同情况下存根的人发布解决方案:

$scope.flowers = {};

var flowerRef = new Firebase('https://URL.firebaseio.com/flowers/');
var keyRef = new Firebase('https://URL.firebaseio.com/users/'+checkAuth.auth.uid+'/flowers');

keyRef.on('child_added', function(snap) {
    var flowerId = snap.key();
    flowerRef.child(flowerId).on('value', function(snap) {
        $timeout(function() {
           if( snap.val() === null ) {
              delete $scope.flowers[flowerId];
           }
           else {
              $scope.flowers[flowerId] = snap.val();
           }
        });
    });
});

keyRef.on('child_removed', function(snap) {
    var flowerId = snap.key();
    $timeout(function(snap) {
        delete $scope.flowers[flowerId];
    });
});

我觉得你的数据结构还不错。要获取simplelogin:69的花信息,您需要在users/simplelogin:69/flowers处向用户的花密钥发出一个请求,然后向flowers/{id}下的每个花数据节点发出3个请求。在本示例中,这是3对3,但在描述生产数据集时,对于10K,这将是3对3。在Firebase中,我一直在努力解决这个概念,因为计算机科学的数学是[0,1,n],而进行4次查找的概念似乎完全是胡作非为,但在实践中效果很好。典型用户会有多少花?感谢response@JamesWing,我相信一个典型用户每个会有大约100-200朵花,你知道一种干净的方法可以使用angularFire向不同节点发出多个请求,并将其绑定到firebase中的更改(例如,如果一个用户广告另一朵花),你的数据结构在我看来还不错。要获取simplelogin:69的花信息,您需要在users/simplelogin:69/flowers处向用户的花密钥发出一个请求,然后向flowers/{id}下的每个花数据节点发出3个请求。在本示例中,这是3对3,但在描述生产数据集时,对于10K,这将是3对3。在Firebase中,我一直在努力解决这个概念,因为计算机科学的数学是[0,1,n],而进行4次查找的概念似乎完全是胡作非为,但在实践中效果很好。典型用户会有多少花?感谢response@JamesWing,我相信一个典型用户会有大约100-200朵花,你知道一种干净的方法,可以使用angularFire向不同节点发出多个请求,并将其绑定到firebase中的更改。例如,如果一个用户广告另一朵花,它也会收到。看起来很棒,埃利亚斯。您可以使用$extendFactory使其更加优雅,这将允许您连接到添加/更改的方法并动态下载这些花。我也是。请注意$$添加和$$更新如何根据id获取用户。感谢您的回复@Kato:我将查看$extendFactory,也感谢演示链接。看起来很棒,Elias。您可以使用$extendFactory使其更加优雅,这将允许您连接到添加/更改的方法并动态下载这些花。我也是。请注意$$added和$$updated是如何根据id获取用户的。感谢您的回复@Kato:我将查看$extendedfactory,也感谢演示链接。