krv*_*krv 4 javascript firebase
我在网址www.example.firebase.com/上具有如下数据结构
{
"companyList" : {
"compkey1" : {
"url1":"somelink1",
"url2":somelink2
},
"compkey2" : {
"url1":"somelink1",
"url2":"somelink2"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我要实现的是我希望Firebase首先返回的公司列表是
compkey1
compkey2
Run Code Online (Sandbox Code Playgroud)
而不是任何子数据
然后,如果用户想查看特定的公司,我希望他们像这样访问该网址
www.example.firebase.com/companyList/compkey2
Run Code Online (Sandbox Code Playgroud)
Firebase的新手,因此请进行解释。
Firebase JavaScript客户端始终会检索完整的节点。它没有选择仅检索密钥。
如果您只想检索公司的键/名称,则必须将它们存储在单独的节点中。
{
"companyList" : {
"compkey1" : {
"url1":"somelink1",
"url2":somelink2
},
"compkey2" : {
"url1":"somelink1",
"url2":"somelink2"
}
},
"companyKeys" : {
"compkey1": true,
"compkey2": true
}
}
Run Code Online (Sandbox Code Playgroud)
Firebase(以及许多其他NoSQL数据库)中的一个常见建议是,以应用程序需要读取数据的方式对数据建模。在上面的示例中,您似乎需要阅读公司密钥列表,因此应该进行建模。
注意:Firebase REST API确实有一个shallow=true仅返回密钥的参数。但是我建议通过对数据进行不同的建模来解决问题。
Firebase 有一个shallow只能检索键的参数。我验证了它比检索整个节点要快得多(100 倍)。
这是 Google 应用程序脚本(抱歉):
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1995 次 |
| 最近记录: |