当前位置: 代码迷 >> JavaScript >> firebase 只获取密钥然后获取数据
  详细解决方案

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

热度:103   发布时间:2023-06-05 09:22:01.0

我在 url www.example.firebase.com/ 有一个数据结构如下

{
  "companyList" : {
        "compkey1" : {
        "url1":"somelink1",
        "url2":somelink2
         },
         "compkey2" : {
         "url1":"somelink1",
         "url2":"somelink2"
         }
   }
}

我想要实现的是我希望 firebase 首先返回公司列表

  compkey1
  compkey2

而不是任何子数据

然后,如果用户想查看特定公司,我希望他们像这样访问该网址

  www.example.firebase.com/companyList/compkey2

firebase 新手所以解释一下。

Firebase JavaScript 客户端始终检索完整的节点。 它没有仅检索密钥的选项。

如果您只想检索公司的键/名称,则必须将它们存储在单独的节点中。

{
  "companyList" : {
     "compkey1" : {
        "url1":"somelink1",
        "url2":somelink2
     },
      "compkey2" : {
         "url1":"somelink1",
         "url2":"somelink2"
     }
  },
  "companyKeys" : {
     "compkey1": true,
     "compkey2": true
  }
}

Firebase(以及许多其他 NoSQL 数据库)中的一个常见建议是以进行。 在上面的示例中,您似乎需要阅读公司密钥列表,这就是您应该建模的内容。

注意: 确实有一个仅返回键的shallow=true参数。 但我建议通过对数据进行不同的建模来解决问题。

Firebase 有一个只能检索键的shallow参数。 我验证了它比检索整个节点更快(100 倍)。

这是在 Google App Script 中(抱歉):

class FirebaseNamespace {

  get database() {
    if(!this._database) {
      var firebaseUrl = "https://mydatabase.firebaseio.com/";
      var secret = "mysecret";
      this._database = FirebaseApp.getDatabaseByUrl(firebaseUrl, secret);
    }
    return this._database;
  }

  get(path, parameters) {
    return this.database.getData(path, parameters);
  }

  keys(path) {
    return Object.keys(this.get(path, {shallow:true}));
  }

  save(path, value) {
    this.database.setData(path, value);
    return value;
  }

}