gpt4 book ai didi

Firebase 查询双重嵌套

转载 作者:行者123 更新时间:2023-12-03 10:15:02 27 4
gpt4 key购买 nike

鉴于 firebase 中的以下数据结构,我想运行一个查询来检索博客“efg”。我现在不知道用户 ID。

{Users :
"1234567": {
name: 'Bob',
blogs: {
'abc':{..},
'zyx':{..}
}
},
"7654321": {
name: 'Frank',
blogs: {
'efg':{..},
'hij':{..}
}
}
}

最佳答案

Firebase API 仅允许您使用其 orderByChildequalTo 方法过滤一级深度(或 with a known path )的子项。
因此,无需修改/扩展您当前的数据结构,只需选择检索所有数据并在客户端对其进行过滤:

var ref = firebase.database().ref('Users');
ref.once('value', function(snapshot) {
snapshot.forEach(function(userSnapshot) {
var blogs = userSnapshot.val().blogs;
var daBlog = blogs['efg'];
});
});
这当然是非常低效的,并且当您拥有大量用户/博客时不会扩展。
因此,对此的常见解决方案是对树建立所谓的索引,将您要查找的键映射到它所在的路径:
{Blogs:
"abc": "1234567",
"zyx": "1234567",
"efg": "7654321",
"hij": "7654321"
}
然后您可以使用以下方法快速访问博客:
var ref = firebase.database().ref();
ref.child('Blogs/efg').once('value', function(snapshot) {
var user = snapshot.val();
ref.child('Blogs/'+user+'/blogs').once('value', function(blogSnapshot) {
var daBlog = blogSnapshot.val();
});
});
您可能还想重新考虑是否可以重组数据以更好地适应您的用例和 Firebase 的限制。他们有一些关于构建数据的很好的文档,但对于 NoSQL/分层数据库的新手来说,最重要的文档似乎是 "avoid building nests"
另请参阅我对 Firebase query if child of child contains a value 的回答以获取一个很好的示例。我还建议阅读关于 many-to-many relationships in Firebase 的文章,以及这篇关于一般 NoSQL data modeling 的文章。

关于Firebase 查询双重嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27207059/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com