Firebase实时数据库,在一个快照中从不同位置获取值
我正在Unity项目中使用Firebase数据库。我读到你想把你的数据库结构尽可能的扁平化,以便更好的表现,所以对于排行榜,我是这样构造的Firebase实时数据库,在一个快照中从不同位置获取值,firebase,unity3d,firebase-realtime-database,Firebase,Unity3d,Firebase Realtime Database,我正在Unity项目中使用Firebase数据库。我读到你想把你的数据库结构尽可能的扁平化,以便更好的表现,所以对于排行榜,我是这样构造的 users uid name uid name leaderboard uid score uid score 我想要一个类,它可以获取这些数据并在完成时触发回调。我在构造函数中运行这个 root.Child("leaderboard").Order
users
uid
name
uid
name
leaderboard
uid
score
uid
score
我想要一个类,它可以获取这些数据并在完成时触发回调。我在构造函数中运行这个
root.Child("leaderboard").OrderByChild("score").LimitToLast(_leaderboardCount).ValueChanged += onValueChanged;
用我写的数据触发回调
void onValueChanged(object sender, ValueChangedEventArgs args)
{
int index = 0;
List<string> names = new List<string>();
foreach (DataSnapshot snapshot in args.Snapshot.Children)
{
root.Child("players").Child(snapshot.Key).GetValueAsync().ContinueWith(task =>
{
if (task.Result.Exists)
{
names.Add(task.Result.Child("name").Value.ToString());
index++;
if (index == args.Snapshot.ChildrenCount)
{
_callback(names);
}
}
});
}
}
void onValueChanged(对象发送方,ValueChangedEventArgs参数)
{
int指数=0;
列表名称=新列表();
foreach(args.snapshot.Children中的DataSnapshot快照)
{
root.Child(“players”).Child(snapshot.Key).GetValueAsync().ContinueWith(任务=>
{
if(task.Result.Exists)
{
name.Add(task.Result.Child(“name”).Value.ToString());
索引++;
if(index==args.Snapshot.ChildrenCount)
{
_(姓名);
}
}
});
}
}
我想知道是否有更好的方法来做这件事,我错过了?我担心如果任务完成的顺序不好,我的排行榜会混乱不堪。我可以在一个快照中获得姓名和分数吗
谢谢 您只能加载:
- 单个完整节点
- 在单个节点下匹配特定条件的所有子节点的子集
- 单个完整节点
- 在单个节点下匹配特定条件的所有子节点的子集
请注意,加载后续节点通常比开发人员预期的效率要高得多,因为Firebase通常可以通过管道传输请求(所有内容都通过单个web套接字连接)。有关详细信息,请参见。您还可以复制数据:还可以将姓名与分数一起存储。您还可以复制数据:还可以将姓名与分数一起存储。