Typescript Firebase云函数进行数据库查询
我正在尝试创建一个Firebase云函数,该函数根据节点的属性计算平均值 这是我的实时数据库的结构Typescript Firebase云函数进行数据库查询,typescript,firebase,firebase-realtime-database,google-cloud-functions,Typescript,Firebase,Firebase Realtime Database,Google Cloud Functions,我正在尝试创建一个Firebase云函数,该函数根据节点的属性计算平均值 这是我的实时数据库的结构 -- Buildings - BuildingID1 - finalResult: 6.5 - Reviews -ReviewID1 - rate : 10 -ReviewID2 - rate : 3 - BuildingID - finalResult: 1.5 - Reviews -R
-- Buildings
- BuildingID1
- finalResult: 6.5
- Reviews
-ReviewID1
- rate : 10
-ReviewID2
- rate : 3
- BuildingID
- finalResult: 1.5
- Reviews
-ReviewID
- rate : 2
-ReviewID
- rate : 1
为此,每次添加/删除/更新子节点(即审查)时,我都要检查rate属性并将其与其他审查的grade属性相加,然后将结果除以节点数。
…最终结果将显示在名为finalResult的新属性中
到目前为止,这是我的函数,但我正在努力找到一种查询数据库的方法,以便从其他节点获取grade属性。你能帮帮我吗
export const schoolUpdated = functions.database.ref('/buildings/{buildingId}/reviews/{buildingId}/rate').onWrite( (change, context) => {
const data = change.after.val();
// ** calculate the result by querying the the reviews **/
return change.after.ref.parent.parent.parent.child('finalResult').set(result);
});
请尝试以下功能并让我知道:
export const schoolUpdated = functions.database.ref('/buildings/{buildingId}/reviews/{buildingId}/rate').onWrite( (change, context) => {
return Promise.all([admin.database().ref(`/buildings/${context.params.buildingId}/reviews`).once('value')]).then(r => {
const allReviews = r[0];
let sumScore = 0;
let count = 0;
allReviews.forEach(item => {
sumScore += item.child('rate').val();
count = count + 1;
});
let result = (sumScore / count);
return change.after.ref.parent.parent.parent.child('finalResult').set(result);
});
});
我想如果你能保持每栋建筑的运行计数和平均值,你会过得更好。添加新评论时,您可以只获取这两个数字,然后回写这些运行值:
average=(average*count+rating)/(count+1)
和count=count+1
。太棒了!请单击波浪号接受答案:)