firebase - 使用 .limitToFirst 或 .limitToLast 仍会返回 Firebase 实时数据库中的全部数据
问题描述
首先,我是 Stackoverflow 和 Flutter Web 编码的新手。这是我的 Flutter 医生:
[✓] Flutter (Channel dev, v1.13.0, on Mac OS X 10.14.6 18G95, locale en-US)
[✓] Android 工具链 - 为 Android 设备开发 (Android SDK 版本 29.0.0)
[✓] Xcode - 开发适用于 iOS 和 macOS (Xcode 10.3)
[✓] Chrome - 为网络开发
[✓] Android Studio(3.5 版)
[✓] VS Code(1.40.2 版)
[✓] 已连接设备(3 个可用)
• 未发现问题!
现在我有一个看起来像这样的数据库:
我想做的是根据它的“时间戳/秒”查询艺术品的孩子,如下所示:
fbDB = database();
fbArtworkRef = fbDB.ref('artworks');
await fbArtworkRef
.orderByChild('last_updated/seconds')
.limitToLast(10)
.once(('value'))
.then((value) {
value.snapshot.forEach((child) {
print(child.val());
});
});
看下面的图片:
所以整个数据是 843.9KB。请注意,当我执行上面的代码时,我得到了 10 个艺术品子作为回报(大约 3KB),但在使用中它显示 858.6KB。这意味着它下载了整个艺术品节点及其所有子节点(加上开销),然后在客户端它将对列表进行排序。
所以问题是:
1. 我怎么能真的只下载这 10 条数据而不是获取所有数据?
2. Flutter App 也是一样的行为吗?
解决方案
改变这个:
fbDB = database();
fbArtworkRef = fbDB.ref('artworks');
await fbArtworkRef
.orderByChild('last_updated/seconds')
.startAt(1572370553)
.once(('value'))
.then((value) {
value.snapshot.forEach((child) {
print(child.val());
});
});
进入这个:
fbDB = database();
fbArtworkRef = fbDB.ref('artworks');
await fbArtworkRef
.orderByChild('last_updated/seconds')
.equalTo(1560908950)
.once(('value'))
.then((value) {
value.snapshot.forEach((child) {
print(child.val());
});
});
推荐阅读
- c#-4.0 - 正则表达式查找名字后的中间首字母
- python - Python Crash Course 游戏:子弹不发射
- reactjs - 如何让 VictoryAxis tickValues 在victory-native 的轴上均匀分布?
- python - 通过 Python 从串口读取 Arduino 传感器数据不起作用
- java - java - 如何在JavaFX启动时修复可见位置的舞台跳跃?
- hive - Avro 表上的 count(*) 返回 0
- reactjs - 在“Connect(DataTableContainer)”的上下文或道具中找不到“商店”
- winapi - 如何清除 HWND 以便它显示下面的所有内容?
- javascript - Ext.field.InputMask 默认聚焦
- java - Servlet 使用 html 文件和 XMLHttpRequest 来显示数据