Pyrebase order_by_child 不排序数据

问题描述

我正在使用 Python 和 Firebase 作为后端开发桌面应用。

由于可能有很多数据,我需要按参数“时间戳”对数据进行分页和排序。所以我正在使用这个:

raw_data = db.child("UploadedImages").order_by_child("Timestamp").start_at(self.start_from).limit_to_first(3).get()

("self.start_from" 是一个double,代表最后接收到的对象的时间戳)

但是返回的数据没有排序,从第一个索引开始。 奇怪的是,它在另一个具有完全相同结构但数据较少的 firebase 项目上运行良好。

我也跳过了分页并尝试了这段代码,结果是一样的:

raw_data = db.child("UploadedImages").order_by_child("Timestamp").get()

获取数据后,我将其作为字典存储在另一个变量中,如下所示:

parsed = json.loads(json.dumps(raw_data.val()))

然后迭代“已解析”变量并将数据解析到我的图像类:

for i in parsed:
    image = models.Image(parsed[i])

以下是我在 Firebase 中的数据示例: my Firebase data structure

解决方法

JSON 对象中的键根据定义是无序的,因此当您调用 raw_data.val() 时,任何有关排序的信息都会丢失。

因此,order_by_child 调用对于过滤服务器上的数据很有用,但(在此上下文中)实际上以特定顺序获取数据没有用。检索数据后,您需要在应用程序代码中对数据重新排序。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...