来自firebase数据库的聚合值

时间:2017-01-10 12:19:33

标签: javascript firebase firebase-realtime-database

我必须从存储在firebase中的一堆产品计算总价。由于在firebase中每个产品将单独退回,我怎么知道总计何时完全计算?

例如:

var total = 0;
firebaseApp.database().ref('/products/').once('value')
.then(function(snapshot) {
    var product = snapshot.val();
    total += product.price;
});

如果我有12个产品,只有在从数据库中检索到所有这些产品后才能返回总数,因此我无法使用变量total,直到我确定所有的产品都被拿走了。

1 个答案:

答案 0 :(得分:3)

我认为您应该重新构建数据,使其看起来像这样

products
    -product1
    -product2
    -product3
     .....

selected_products
    user1:
       -products_list:
            -product2: true
            -pruduct3: true
            -product6: true
       -total_price: 140

这样,您就不必担心在客户端计算价格了。只需在用户选择产品时加上价格即可。

如果那不是用例(用户选择产品),这意味着出于其他原因需要总价,那么这种方法将没有用处。

编辑:

如果您只需要计算所有产品的价格(不确定原因),您可以收听child_added事件:

var totalPrice = 0;
firebaseApp.database().ref(`/products/`).on('child_added', function(snapshot){
    var product = snapshot.val();
    totalPrice += product.price;
})

完成所有这些操作后,您应该拥有一个变量,其中所有产品的价格合并。

同样,你可以通过一次('值')调用获得相同的结果。

firebaseApp.database().ref(`/products/`).once('value', function(snapshot){
    snapshot.forEach(function(productSnapshot){
        totalPrice += productSnapshot.val().price;  
    })
})