Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Firebase数据按时间戳排序_Sorting_Firebase_Firebase Realtime Database - Fatal编程技术网

Sorting 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

我有一个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()
生成的键。我需要按照它们拥有的最早的时间戳键对类别进行排序。只有来自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()进行检查。但这很难说,因为我不知道应用程序的整个上下文