为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

桃花长相依 2019-09-27 16:07:44
我正在使用FirebaseRecyclerAdapter并向FirebaseRecyclerOptions构造函数传递一些查询。每个项目都有许多字段,包括时间戳a和另一个整数字段b。因此,我希望年龄较大a但较少的物品排b在首位。使用sqlite易于实现,而使用nosql则不那么容易。似乎我需要添加一些保留两个字段的额外字段: String.valueOf(a) + String.valueOf(b)但是如何实现asc / desc属性?不能加载整个列表并使用Java进行排序。
查看完整描述

2 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

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


Firebase-root

   |

   --- itemId

          |

          --- a: valueOfA

          |

          --- b: valueOfB

          |

          --- a_b: valueOfA_valueOfB

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


与Firebase Realtime数据库不同,Cloud Firestore允许复合查询。您应该看看这个。因此,在Cloud Firestore中允许进行以下查询,而无需创建组合属性。


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

当您订购字符串时,这是正常的订购方法。速战速决会是这样每一秒元素前加两个零:"1516428687_001","1516428687_002","1516428687_012"。现在您的订单就可以了。有关更多说明,请参阅我在这篇文章中的回答。


查看完整回答
反对 回复 2019-09-27
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

我考虑了-但是在实践中它是行不通的,因为正如我猜测firebase内部使用标准的字符串比较器,所以三个键的顺序将遵循 "1516428687_1", "1516428687_12", "1516428687_2"。但是我需要"1516428687_1", "1516428687_2", "1516428687_12"。

查看完整回答
反对 回复 2019-09-27
  • 2 回答
  • 0 关注
  • 475 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信