如何在Firebase的一个子对象内按另一个子对象排序

3

我正在尝试按照另一个子元素内的子值对所有数据进行升序和降序排序。在类的主作用域中:

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference dbRef = database.getReference("university");

i have data structure like this

{
"university": {
    "13": {
      "name": "value"
      "exam": {
        "exam_date": "value"
        "reg_date": "value"
      }
    }
    "15": {
      "name": "value"
      "exam": {
        "exam_date": "value"
        "reg_date": "value"
      }
    }
    "20": {
      "name": "value"
      "exam": {
        "exam_date": "value"
        "reg_date": "value"
      }
    }
}

首先我尝试了这种方法:Query q=dbRef.orderByChild("13/exam/exam_date"),但是它获取的数据与直接使用dbRef时使用ValueEventListener获取的数据相同。

3个回答

9
为了解决这个问题,请更改以下代码行:
Query q=dbRef.orderByChild("13/exam/exam_date")

使用

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("university").orderByChild("exam/exam_date");

1
谢谢,它工作得很好,我只是将 "Query q=dbRef.orderByChild("13/exam/exam_date")" 更改为 "Query q=dbRef.orderByChild("exam/exam_date");"。 - Modgo

0
 firebaseDatabaseRef.child(AppConstants.RootNode.userRoomGroupIds).child(myUserId).orderByChild(AppConstants.FireBaseRoom.LAST_MESSAGE+"/"+AppConstants.LASTMESSAGE.MESSAGE_TIME_STAMP).startAt(System.currentTimeMillis());

这个查询会返回从当前毫秒数开始的数据,因此我使用了orderByChild,它可以引用特定子节点/lastmessage/timeStamp。


0

现在,我使用 orderBy(FieldPath) 来实现这个功能。

Query q=dbRef.orderBy(FieldPath.of("13", "exam", "exam_date"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接