问题描述
我正在使用 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
调用对于过滤服务器上的数据很有用,但(在此上下文中)实际上以特定顺序获取数据没有用。检索数据后,您需要在应用程序代码中对数据重新排序。