firebase仅获取密钥然后获取数据

zbdgwd5y  于 2022-12-14  发布在  其他
关注(0)|答案(2)|浏览(137)

我在URL www.example.com处具有如下数据结构www.example.firebase.com/

  1. {
  2. "companyList" : {
  3. "compkey1" : {
  4. "url1":"somelink1",
  5. "url2":somelink2
  6. },
  7. "compkey2" : {
  8. "url1":"somelink1",
  9. "url2":"somelink2"
  10. }
  11. }
  12. }

我想实现的是,我希望firebase首先返回被

  1. compkey1
  2. compkey2

而不是任何子数据
然后,如果用户想看到一个特定的公司,我希望他们去该网址,就像这样

  1. www.example.firebase.com/companyList/compkey2

新到firebase所以这样解释。

0ve6wy6x

0ve6wy6x1#

Firebase JavaScript客户端总是检索完整的节点,它没有只检索键的选项。
如果只想检索公司的键/名称,则必须将它们存储在单独的节点中。

  1. {
  2. "companyList" : {
  3. "compkey1" : {
  4. "url1":"somelink1",
  5. "url2":"somelink2"
  6. },
  7. "compkey2" : {
  8. "url1":"somelink1",
  9. "url2":"somelink2"
  10. }
  11. },
  12. "companyKeys" : {
  13. "compkey1": true,
  14. "compkey2": true
  15. }
  16. }

Firebase(以及许多其他NoSQL数据库)中的一个常见建议是,以应用程序需要读取的方式对数据进行建模。在上面的示例中,似乎需要读取一个公司密钥列表,因此这就是您应该建模的内容。
注意:Firebase REST API确实有一个只返回键的shallow=true参数,但是我建议通过不同的数据建模来解决这个问题。

展开查看全部
ccgok5k5

ccgok5k52#

Firebase有一个shallow参数,它只能检索密钥。我验证了它比检索整个节点快得多(100倍)。
以下是Google应用程序脚本(抱歉):

  1. class FirebaseNamespace {
  2. get database() {
  3. if(!this._database) {
  4. var firebaseUrl = "https://mydatabase.firebaseio.com/";
  5. var secret = "mysecret";
  6. this._database = FirebaseApp.getDatabaseByUrl(firebaseUrl, secret);
  7. }
  8. return this._database;
  9. }
  10. get(path, parameters) {
  11. return this.database.getData(path, parameters);
  12. }
  13. keys(path) {
  14. return Object.keys(this.get(path, {shallow:true}));
  15. }
  16. save(path, value) {
  17. this.database.setData(path, value);
  18. return value;
  19. }
  20. }
展开查看全部

相关问题