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