2016-11-27 139 views
1

我有一个Firebase节点结构,如下所示。Firebase数据按时间戳排序

categories 
    category1 
     timestamps 
      23c491sdfwrasddgasd: true 
      asdf8234dfjalskdask: true 
      39fsdizxcasfgbskdf7: true 
      2asqwizxov340bs9fms: true 
    category2 
     timestamps 
      p23491sdfwrasddgasd: true 
      asdfpovaskdrfskdask: true 
    category3 
     timestamps 
      vmk339ffk3rasddgasd: true 
      asdf8234dfjalskdvml: true 
      bnwdwizxcasfgbskdf7: true 

时间戳键是由push()生成的键。我需要按照他们拥有的最旧时间戳键对类别排序。只有来自时间戳节点的最早时间戳才会被计数。

基本上我需要对它们进行第一次修改的时间进行排序。

欢迎任何帮助,包括重新设计节点的提示。

回答

1

你有没有想过平坦化你的数据库? 数据库设计更改为:

类别

category1 
    oldest_timestamp: 2asqwizxov340bs9fms 
    timestamps 
     23c491sdfwrasddgasd: true 
     asdf8234dfjalskdask: true 
     39fsdizxcasfgbskdf7: true 
     2asqwizxov340bs9fms: true 
    category2 
    oldest_timestamp: asdfpovaskdrfskdask 
    timestamps 
     p23491sdfwrasddgasd: true 
     asdfpovaskdrfskdask: true 
    category3 
    oldest_timestamp: bnwdwizxcasfgbskdf7 
    timestamps 
     vmk339ffk3rasddgasd: true 
     asdf8234dfjalskdvml: true 
     bnwdwizxcasfgbskdf7: true 

基本上你添加了一个名为 “oldest_timestamp” 节点。现在您可以轻松地通过查询来订购您的类别。

Query myquery = FirebaseDatabase.getInstance().getReference().child("categories").orderByChild("oldest_timestamp"); 

不要忘记在Firebase数据库规则中将其编入索引,以获得更好的性能。

+0

目前我每次修改类别时都会推送一个值。如何检测类别是否已被修改?我必须首先使用值侦听器来检查类别吗? –

+0

是的,您可以使用ValueEventListener并在时间戳位置使用dataSnapshot.exists()。但很难说,因为我不知道应用程序的整个上下文 – Hhorn