gpt4 book ai didi

javascript - Firebase Realtime Database 和 Cloud Functions——基于数据节点的递增计数器

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

我正在开发一个 Web 应用程序,它将可视化我的 Firebase 数据库中的数据。但首先,我希望能够使用给定数据“计算”用户总数,以便我可以在图表中使用该计数。

作为引用,我的数据库如下所示:

enter image description here

因为我希望所需 key 的总计是单独的,所以我猜我需要为每个 key 单独计算。我已经开始编写一个云函数来跟踪新用户的创建时间:

import * as functions from 'firebase-functions'
export const onMessageCreate = functions.database
.ref('/students/{studentID}')
.onCreate((snapshot, context) => {
const userData = snapshot.val()

const afterGrad = userData.afterGrad
const gender = userData.gender
const gradDate = userData.gradDate
const program = userData.program
const race = userData.race
const timeToComplete = userData.timeToComplete
})

但是现在,我完全不知道应该如何创建计数器。这样的事情是否足够,每个常量都有一个单独的计数器?

import * as functions from 'firebase-functions'
var counterAfterGrad;

export const onMessageCreate = functions.database
.ref('/students/{studentID}')
.onCreate((snapshot, context) => {
const userData = snapshot.val()
const afterGrad = userData.afterGrad
var counterAfterGrad++
})

或者我应该考虑在这种情况下使用交易吗?我真的不确定最好的方法,非常感谢您的帮助。

最佳答案

是的,您应该使用交易。请参阅此处的文档:https://firebase.google.com/docs/database/web/read-and-write#save_data_as_transactionshttps://firebase.google.com/docs/reference/js/firebase.database.Reference#transaction

要计算用户总数,您可以执行以下操作:

export const onMessageCreate = functions.database
.ref('/students/{studentID}')
.onCreate((snapshot, context) => {
const userData = snapshot.val()
const afterGrad = userData.afterGrad

const allUsersCounterRef = admin
.database()
.ref('allUsersCounter');

return allUsersCounterRef
.transaction(counter_value => {
return (counter_value || 0) + 1;
})

})

请注意,您可能必须考虑删除用户。

您很可能有多个计数器,例如按“性别”(男/女)和按“程序”。然后,您将在交易中使用一个对象,如下所示:

exports.onMessageCreate = functions.database
.ref('/students/{studentID}')
.onCreate((snapshot, context) => {
const userData = snapshot.val();

const countersRef = admin.database().ref('counters');

return countersRef.transaction(currentData => {
currentData[userData.gender] = (currentData[userData.gender] || 0) + 1;
currentData[userData.program] = (currentData[userData.program] || 0) + 1;
return currentData;
});
});

关于javascript - Firebase Realtime Database 和 Cloud Functions——基于数据节点的递增计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53396592/

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