如何按两个字段对Firebase记录进行排序(Android)

时间:2018-01-19 12:16:44

标签: android firebase firebase-realtime-database

我正在使用FirebaseRecyclerAdapter并将FirebaseRecyclerOptions传递给构造函数。每个项目都包含多个字段,包括时间戳a和另一个整数字段b。因此,我希望旧版ab较少的项目位于列表顶部。使用sqlite很容易实现,但使用nosql却不那么容易。看来我需要添加一些额外的字段来保存两个字段: String.valueOf(a) + String.valueOf(b)但是如何实现asc / desc属性?

加载整个列表并在Java中排序不是一种选择。

1 个答案:

答案 0 :(得分:0)

不幸的是,Firebase Realtime数据库不支持对多个属性的查询,仅支持对单个子属性的查询。所以,你猜测你需要创建一个额外的字段以保留两个字段。因此,为了实现这一点,您需要创建一个新的字段,在您的数据库中应该如下所示:

Firebase-root
   |
   --- itemId
          |
          --- a: valueOfA
          |
          --- b: valueOfB
          |
          --- a_b: valueOfA_valueOfB

如您所见,a_b属性组合了您要过滤的值。

与Firebase实时数据库不同,Cloud Firestore允许compound queries。你应该看看这个。因此,在不创建组合属性的情况下,Cloud Firestore中允许使用下面的查询。

itemIdRef.whereEqualTo("a", "valueOfA").whereEqualTo("b", "valueOfB");

订购字符串时,这是正常的订购方法。快速解决方法是在每个第二个元素之前添加两个零,如下所示:"1516428687_001""1516428687_002""1516428687_012"。现在你的订单没问题。有关详细说明,请参阅此post的答案。