OrderByChild不会下订单,Firebase实时数据库

时间:2018-11-18 11:27:15

标签: c# firebase unity3d firebase-realtime-database

我使用Firebase实时数据库。 我的数据库中有以下排行榜数据:

Leaders:
        0
           Name: Michal
           Score: 40
        1
           Name: David
           Score: 35
        2
           Name: Rob
           Score: 53

enter image description here

我正在读取除OrderByChild之外无法正常工作的数据。 我认为这与我保存数组编号有关。

注意:我不使用任何奇怪的方法来保存带有数组的数据,但实际上是使用Unity事务处理的google示例,话虽如此,我希望OrderByChild能够正常工作。 Transactions, see bottom of screen

这是检索数据的代码:

  FirebaseDatabase.DefaultInstance
          .GetReference("Leaders").OrderByChild("score").GetValueAsync().ContinueWith(task =>
                    {
                        if (task.IsFaulted)
                        {
                            Debug.LogError("error in reading LeaderBoard from DB");
                            return;
                        }
                        else if (task.IsCompleted)
                        {
                            Debug.Log("Received values for Leaders.");
                            string JsonLeaderBaord = task.Result.GetRawJsonValue();
                            callback(JsonLeaderBaord);
                        }
                    } 

我确实尝试添加onIndex规则,但仍然相同,它忽略了顺序。

1 个答案:

答案 0 :(得分:2)

当您像这样查询数据库时:

FirebaseDatabase.DefaultInstance
      .GetReference("Leaders").OrderByChild("score").GetValueAsync().ContinueWith(task =>

Firebase以正确的顺序返回快照,其中包含请求信息。但是当您随后致电:

string JsonLeaderBaord = task.Result.GetRawJsonValue();

它必须将快照转换为JSON数据。而且在JSON中,子节点的顺序根据定义是不确定的,因此您会丢失有关该顺序的信息。

要以正确的顺序处理排行榜,请使用内置方法遍历快照:

foreach (DataSnapshot leader in snapshot.Children) {
    Debug.Log("Received value for leader: "+leader.Child("Score").Value);
}