firebase - 使用.limitToFirst或.limitToLast仍会在Firebase Realtime数据库中返回整个数据

标签 firebase flutter firebase-realtime-database dart flutter-web

首先,我是Stackoverflow和Flutter Web编码方面的新手。这是我的Flutter医生:

[✓] Flutter (Channel dev, v1.13.0, on Mac OS X 10.14.6 18G95, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 10.3)
[✓] Chrome - develop for the web
[✓] Android Studio (version 3.5)
[✓] VS Code (version 1.40.2)
[✓] Connected device (3 available)

• No issues found!



现在,我得到了一个数据库,看起来像这样:

Realtime DB Datasets

我想做的是根据这样的“时间戳/秒”查询艺术品的子代:
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());
  });
});

看下面的图片:

RealtimeUsage

因此整个数据为843.9KB。请注意,当我执行上述代码时,我得到10个美术作品 child 作为返回(约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());
  });
});

https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_database/lib/src/query.dart#L137

关于firebase - 使用.limitToFirst或.limitToLast仍会在Firebase Realtime数据库中返回整个数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59351924/

相关文章:

node.js - 如何在 firebase 的云功能中添加版本

flutter - 使用 Firebase 进行声明式身份验证路由

dart - 从状态类外部更改 Flutter 小部件的状态

dart - 如何编写返回字符串的内联函数?

android - Firebase 在滚动条上加载更多项目 (Android)

javascript - 如何将项目存储在 firebase 列表中的特定位置

ios - 读取 GoogleService-Info.plist 文件报错

javascript - 无法在 firebase 上上传数据?

ios - Firebase iOS SDK `setValue` 完成调用不一致

node.js - firebase 函数通知