鉴于firebase中的数据结构,我想运行一个查询来检索博客'efg' . 我此时不知道用户ID .
{Users :
"1234567": {
name: 'Bob',
blogs: {
'abc':{..},
'zyx':{..}
}
},
"7654321": {
name: 'Frank',
blogs: {
'efg':{..},
'hij':{..}
}
}
}
2 回答
Firebase API仅允许您使用
orderByChild
和equalTo
方法过滤一级深度(或with a known path)的子级 .因此,无需修改/扩展当前的数据结构,只留下检索所有数据的选项并在客户端过滤它:
这当然是非常低效的,并且当您拥有非平凡数量的用户/博客时无法扩展 .
因此,通常的解决方案是对树的所谓索引,将您要查找的密钥映射到它所在的路径:
然后您可以使用以下命令快速访问博客:
您可能还想重新考虑是否可以重新构建数据以更好地适应您的用例和Firebase的限制 . 他们有一些关于构建数据的好文档,但对NoSQL /层次数据库新手来说,最重要的一个似乎是"avoid building nests" .
另请参阅Firebase query if child of child contains a value上的答案,以获得一个很好的例子 . 我还建议阅读many-to-many relationships in Firebase,这篇文章一般NoSQL data modeling .
根据您当前的数据结构,您可以检索包含您要查找的博客文章的用户 .
您需要使用
limitToLast
,因为在使用orderByChild
docs时,对象最后排序 .