Sorting Firebase数据按时间戳排序
我有一个Firebase节点结构,如下所示Sorting Firebase数据按时间戳排序,sorting,firebase,firebase-realtime-database,Sorting,Firebase,Firebase Realtime Database,我有一个Firebase节点结构,如下所示 categories category1 timestamps 23c491sdfwrasddgasd: true asdf8234dfjalskdask: true 39fsdizxcasfgbskdf7: true 2asqwizxov340bs9fms: true category2 timestamps
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()
生成的键。我需要按照它们拥有的最早的时间戳键对类别进行排序。只有来自timestamps节点的最早的时间戳将被计数
基本上,我需要在类别第一次被修改时对它们进行排序
欢迎提供任何帮助,包括重新设计节点的提示。您是否考虑过将数据库扁平化? 将数据库设计更改为: 类别
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
基本上,您已经添加了一个名为“最早的时间戳”的节点。现在,您可以通过查询轻松地对类别进行排序
Query myquery = FirebaseDatabase.getInstance().getReference().child("categories").orderByChild("oldest_timestamp");
不要忘记在Firebase数据库规则中为其编制索引,以获得更好的性能。目前,每次修改类别时,我都会推送一个值。如何检测类别是否已被修改?是否必须首先使用值侦听器检查类别?是的,您可以使用ValueEventListener并在时间戳位置使用dataSnapshot.exists()进行检查。但这很难说,因为我不知道应用程序的整个上下文