使用云功能在 firebase 实时数据库中交换排名 - 游戏
Swap rank in firebase realtime database using cloud function - Game
我有一个数据库,其中包含所有 users_ID 和 x_location。
我正在尝试从 Firebase 云函数中的 onUpdate()
触发方法中监听 x_location 更新并获取排名、x_location 和 user_ID。但是我如何直接获取前一个用户的详细信息来检查该用户的 x_location 是否小于当前用户的 x_location 以交换排名?
我有最终的方法遍历所有用户找到前排用户并猜测变化,但我想知道更精确和优化的方法来实现这一点。遍历所有user_ID看起来很耗内存的任务。
我还要提到此功能必须 运行 用于多个用户更新,这可能是大量数据的巨大处理。
对于当前情况,我只是收集更新用户的所有详细信息。
我的 Firebase 数据库快照:
users
|- -kSjJSDFjl2DFc
| |- rank: 2
| |- x_location: 500
|- -laoeSDFjfkdie
| |- rank: 1
| |- x_location: 600
|
So on...
我在 firebase 云函数中的交换函数:
//rank swap function
exports.swapRank = functions.database.ref('/users/{userID}').onUpdate(event => {
var xVal = 0; //updated user x_location
var cxVal = 0; //current preceding user x_location
var rVal = 0; //updated user rank
var crVal = 0; //current preceding user rank
var uVal = event.params.userID; //updated user_ID
var cuVal = ""; //current preceding user_ID
return event.after.ref.once('value').then(snapshot => {
snapshot.forEach(child => {
if(child.key === 'x') //updated user x_location
xVal = child.val();
else if(child.key === 'r') //updated user rank
rVal = child.val();
});
//*********************************************************************
//preceding rank details collection needed here
//cxVal,crVal,cuVal;
//*********************************************************************
//To implement
//if((crVal==(rVal-1)) & cxVal<xVal)
//swap user ranks in firebase database;
});
});
假设您想要将 rank: 2
的用户与其之前的玩家交换。您可以使用以下查询从数据库中获取这些信息:
firebase.database().ref("users").orderByChild("rank").endAt(2).limitToLast(2)
我有一个数据库,其中包含所有 users_ID 和 x_location。
我正在尝试从 Firebase 云函数中的 onUpdate()
触发方法中监听 x_location 更新并获取排名、x_location 和 user_ID。但是我如何直接获取前一个用户的详细信息来检查该用户的 x_location 是否小于当前用户的 x_location 以交换排名?
我有最终的方法遍历所有用户找到前排用户并猜测变化,但我想知道更精确和优化的方法来实现这一点。遍历所有user_ID看起来很耗内存的任务。
我还要提到此功能必须 运行 用于多个用户更新,这可能是大量数据的巨大处理。
对于当前情况,我只是收集更新用户的所有详细信息。
我的 Firebase 数据库快照:
users
|- -kSjJSDFjl2DFc
| |- rank: 2
| |- x_location: 500
|- -laoeSDFjfkdie
| |- rank: 1
| |- x_location: 600
|
So on...
我在 firebase 云函数中的交换函数:
//rank swap function
exports.swapRank = functions.database.ref('/users/{userID}').onUpdate(event => {
var xVal = 0; //updated user x_location
var cxVal = 0; //current preceding user x_location
var rVal = 0; //updated user rank
var crVal = 0; //current preceding user rank
var uVal = event.params.userID; //updated user_ID
var cuVal = ""; //current preceding user_ID
return event.after.ref.once('value').then(snapshot => {
snapshot.forEach(child => {
if(child.key === 'x') //updated user x_location
xVal = child.val();
else if(child.key === 'r') //updated user rank
rVal = child.val();
});
//*********************************************************************
//preceding rank details collection needed here
//cxVal,crVal,cuVal;
//*********************************************************************
//To implement
//if((crVal==(rVal-1)) & cxVal<xVal)
//swap user ranks in firebase database;
});
});
假设您想要将 rank: 2
的用户与其之前的玩家交换。您可以使用以下查询从数据库中获取这些信息:
firebase.database().ref("users").orderByChild("rank").endAt(2).limitToLast(2)