用于汇总或聚合值的Firebase Cloud函数

用于汇总或聚合值的Firebase Cloud函数,firebase,firebase-realtime-database,google-cloud-functions,Firebase,Firebase Realtime Database,Google Cloud Functions,我一直在努力总结价格,通过新的firebase云功能得出总价格 "Cart" : { "-Ksdasd50oR04q073k5" : { "ID" : 0.01, "price" : 20 }, "-KhOc0CGdsddihGB2N" : { "ID" : 001,, "price" : 20 }, 这是我的开始 exports.cartadd = functions.database.ref('Cart/{ui

我一直在努力总结价格,通过新的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);
      }
  });

由于总数需要更改,它应该是
var
而不是
const

改变

const total = 0;


由于总数需要更改,它应该是
var
而不是
const

改变

const total = 0;

这应该做到:

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);
      }
  });
这应该做到:

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);
      }
  });
试试这个:

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]);
      }
  });
试试这个:

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]);
      }
  });

是的,更改了它,但仍然没有输出反映在我的日志中是的,更改了它,但仍然没有输出反映在我的日志中在什么条件下你需要计算这个和?在什么条件下你需要计算这个和?@Bob只是想知道你是否有知识。我们可以在毫秒内从mysql/sql中获取数百万条记录的总和…但是我担心在前端获取它们并对它们求和将不好,并且可能会崩溃browser@Luckyy:我不知道,但我猜对那么多记录求和需要更长的时间。@Bob只是想知道你是否有知识。我们可以在毫秒内从mysql/sql中获取数百万条记录的总和…但是我担心在前端获取它们并对它们求和将不好,并且可能会崩溃browser@Luckyy当前位置我不知道,但我猜对那么多记录求和需要更长的时间。