【问题标题】:Ordering data in firebase realtime database在 Firebase 实时数据库中排序数据
【发布时间】:2021-05-07 10:37:18
【问题描述】:

我有这样的表:

"users":{
      "$userUID":{
        "dm":{
            "$roomID":{
                "date":1617755185,
                "lastmessage":"Hi"
            }
        }
      }
}

我想查询房间($roomID)按日期排序 所以代码是:

val reference:DatabaseReference = FirebaseDatabase.getInstance().getReference("users").child(FirebaseAuth.getInstance().uid!!).child("dm")
var query:Query = reference.orderByChild("date").startAt($previousRoomId).limitToLast(2)

但是没有数据和消息: Using an unspecified index. Your data will be downloaded and filtered on the client. Consider adding '".indexOn": "date"' at users/fDX9PVJpQxXCVoQzOUS7USarVcv2/dm

我尝试在我的 firebase 规则中添加 "users":{".indexOn":"date },但没有帮助。我该怎么办?

【问题讨论】:

    标签: android firebase kotlin firebase-realtime-database


    【解决方案1】:

    您需要在查询运行的路径上定义该索引。

    通过添加"users":{".indexOn":"date" },您定义了一个索引,允许您在/users 上运行查询,然后包含每个直接子节点的date 值。这在某些情况下可能有用,但它不是您共享的代码所需的索引。

    由于该代码查询/users/$uid/dm,您需要在该路径定义索引:

    {
      "rules": {
        "users": {
          "$uid": {
            "dm": {
              ".indexOn": "date"
            }
          }
        }
      }
    }
    

    上面的$uidwildcard variable表示其下的规则适用于users的每个子节点,所以每个用户的dm节点都有自己的索引。

    【讨论】:

      猜你喜欢
      • 2017-09-08
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 2020-02-06
      相关资源
      最近更新 更多