Firebase (2016) 浅层查询

IT技术 javascript firebase firebase-realtime-database
2021-01-29 12:39:56

我正在试用 Firebase(自 Google 的新版本以来)。

在火力地堡原始版本的参数shallow=true将与返回一个对象{ key: true },每key在被请求(等等,而不是被退回的孩子,你只知道一个事实,即子女存在)树/分支的根。这很有用,因为您不一定想要来自子节点的所有数据(特别是如果有很多数据)。

有没有办法用 Google 的新版 Firebase 做到这一点?我在想这样的事情:

firebase.database().ref('/data/?shallow=true').once('value', function(snapshot) {
  // do something with snapshot
}

上面的代码snapshot.val()返回 null,如果我正确阅读了文档,这个功能似乎已经消失了。

2个回答

?shallow=trueFirebase Database 2.x 中参数仅在 REST API 中可用。请参阅https://www.firebase.com/docs/rest/guide/retrieving-data.html#section-rest-uri-params

在新的 Firebase Database 3.x 中,相同的参数仍然只在 REST API 中可用。请参阅https://firebase.google.com/docs/database/rest/retrieve-data#shallow

您正在使用从未支持此参数的 Firebase SDK(从它的外观来看是 JavaScript)。

有关过去讨论过的更多问题,请参阅:

sdk 中的浅层似乎与 Firebase 的理念适得其反。他们希望应用程序的行为就像从本地数据库操作一样。如果过度使用,浅层只会扼杀体验。在文档中,他们总是要求我们扁平化数据结构......
2021-03-20 12:39:56
有没有计划改变这种情况?如果您总是被迫下载一个节点的所有后代,那么编写高效的值侦听器将变得非常困难。
2021-03-31 12:39:56
@Frank van Puffelen,感谢您的回复。是否有计划将浅查询添加到 Firebase SDK?另外,是否有任何原因过去没有添加它?
2021-04-09 12:39:56
我还想请求向 iOS SDK 添加浅选项。我的数据库中有超过 150 万个项目。
2021-04-12 12:39:56

根据弗兰克的回答,这对我有用:

import request from 'request';

request({ url: "https://[YOUR-APP-ID].firebaseio.com/path/to/data/.json?shallow=true" }, (error, response, body) => {
    const shallowData = JSON.parse(body);
    console.log(shallowData);
});

参考:https : //firebase.google.com/docs/database/rest/retrieve-data#shallow