gpt4 book ai didi

javascript - 对 Firebase 数据库中的数据集取平均值

转载 作者:行者123 更新时间:2023-11-30 20:20:06 25 4
gpt4 key购买 nike

我正在设计一个应用程序,但对 Javascript 有点不适应。到目前为止,我有一个具有以下结构的 Firebase 实时数据库。[! enter image description here

我想做的是每次添加/更新绿色区域时,从该绿色区域中获取一个值(红色),从每个绿色对象中保存的所有值中获取平均值并放置它变成底部的棕色物体。

有人知道如何使用 Javascript/Firebase 函数完成此操作吗?

JSON 导出:

{
"5Rz8DpU34PeXAcnriD6vEiPu7jk2" : {
"UiWK7RkdeCbUte8g7naB9qp42qu1" : {
"rating1" : 5
},
"average" : 0
},
"Fi43uP2LcbVLi2uFwUyCAp2uvSH2" : {
"average" : 0
},
"UiWK7RkdeCbUte8g7naB9qp42qu1" : {
"Fi43uP2LcbVLi2uFwUyCAp2uvSH2" : {
"rating1" : 5,
"rating2" : 5
},
"asdas" : {
"rating1" : 2
},
"average" : 0
},
"gov4hRpDgDVhyVgsQrYJnn1rfeW2" : {
"UiWK7RkdeCbUte8g7naB9qp42qu1" : {
"rating1" : 5
},
"average" : 0
}
}

最佳答案

以下 Cloud Function 代码应该可以解决问题:

const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.database();

exports.average = functions.database
.ref('/ratings/{blueId}/{greenId}')
.onWrite((change, context) => {
const blueId = context.params.blueId;
const blueRef = db.ref('ratings/' + blueId);

const blueAverageRef = db.ref('ratings/' + blueId + '/average');

let totalSum = 0;
let nbrOfElem = 0;

return blueRef
.once('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
if (childSnapshot.val().val) {
//console.log(childSnapshot.val());
totalSum += childSnapshot.val().val;
nbrOfElem++;
}
});
})
.then(() => {
//console.log('totalSum: ' + totalSum);
//console.log('nbrOfElem: ' + nbrOfElem);
return blueAverageRef.transaction(function(average) {
if (nbrOfElem > 0) {
return { val: totalSum / nbrOfElem };
} else {
return 0;
}
});
})
.catch(error => {
console.log(error);
});
});

请注意,它使用了一个事务,请参阅 https://firebase.google.com/docs/database/web/read-and-write#save_data_as_transactionshttps://firebase.google.com/docs/reference/js/firebase.database.Reference#transaction

数据库的结构应为:

-ratings
-blueNode1
-greenNode11
-val:2 // <- red node in your picture
-greenNode12
-val:10
-average // <- red node in your picture
-val:6
-blueNode2
-greenNode21
-val:5
-greenNode22
-val:3
-greenNode23
-val:1
-average
-val:5

关于javascript - 对 Firebase 数据库中的数据集取平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51536248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com