【问题标题】:Firebase Cloud Function To Sum up or aggregate valuesFirebase Cloud 函数总结或聚合值
【发布时间】:2017-05-15 22:07:46
【问题描述】:

我一直在尝试总结价格,以通过新的 Firebase 云功能得出总数

"Cart" : {
    "-Ksdasd50oR04q073k5" : {
      "ID" : 0.01,
      "price" : 20
    },
    "-KhOc0CGdsddihGB2N" : {
      "ID" : 001,,
      "price" : 20
    },

这是我的开始,

exports.cartadd = functions.database.ref('Cart/{uid}').onWrite(event => {

   let ref = admin.database().ref('Cart/{uid}');
   return ref.once('value').then(snapshot => {
      if (snapshot.hasChildren()) {
        var total= 0;
        snapshot.forEach(function(child) {

           total += snapshot.val().price;
        });
       console.log(total);
      }
  });

【问题讨论】:

  • 在什么条件下需要计算这个总和?

标签: firebase firebase-realtime-database google-cloud-functions


【解决方案1】:

应该这样做:

exports.cartadd = functions.database.ref('Cart').onWrite(event => {
      const snapshot = event.data;
      if (snapshot.hasChildren()) {
        var total= 0;
        snapshot.forEach(function(item) {
           total += item.child('price').val();
        });
        console.log(total);
      }
  });

【讨论】:

  • @Bob 只是想知道您是否有知识。我们可以在几毫秒内从数百万条记录中从 mysql/sql 中获取总和……但恐怕在前端获取它们并对其求和并不好,并且可能会导致浏览器崩溃
  • @Luckyy:我不知道,但我猜想对那么多记录求和需要更长的时间。
【解决方案2】:

试试这个:

exports.cartadd = functions.database.ref('Cart').onWrite(event => {
      const snapshot = event.data;
      const totalRef = admin.database().ref("Cart/total");
      if (snapshot.hasChildren()) {
        let total= 0;
        snapshot.forEach(function(item) {
           total += item.child('price').val();
        });
        const transaction = totalRef.set(total).then(()=>{console.log(total);});
        return Promise.all([transaction]);
      }
  });

【讨论】:

    【解决方案3】:

    由于总数需要改变,所以应该是var而不是const

    改变

    const total = 0;
    

    var total = 0;
    

    【讨论】:

    • 是的,已更改但我的日志中仍然没有输出反映
    【解决方案4】:
    total += child.val().price; // instead
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      相关资源
      最近更新 更多