首先,我是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!
现在,我得到了一个数据库,看起来像这样:
我想做的是根据这样的“时间戳/秒”查询艺术品的子代:
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个美术作品 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/