首页 文章

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

提问于
浏览
0

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

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

1 回答

  • 1

    遗憾的是,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的答案 .

相关问题