当前位置: 首页 > 知识库问答 >
问题:

Firebase查询双嵌套

叶炜
2023-03-14

在firebase中给定下面的数据结构,我想运行一个查询来检索博客'EFG'。我现在不知道用户id。

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

共有1个答案

仰欣悦
2023-03-14

Firebase API仅允许您使用其OrderByChildEqualto方法过滤一级深(或已知路径)的子级。

因此,在不修改/扩展当前数据结构的情况下,只保留检索所有数据并在客户端对其进行过滤的选项:

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/分层数据库的人来说,最重要的文档似乎是“避免构建嵌套”。

如果child of child包含一个值,请参见我对Firebase查询的回答,这是一个很好的示例。我还建议阅读Firebase中的多对多关系,以及这篇关于通用NoSQL数据建模的文章。

 类似资料:
  • 我在数据库里有这个: 当教师添加一个类和一个节时,在节点下使用生成一个随机id。还有一个和一个节点,其中包含ID和属性。 学生加入了一个类,因此也在中创建了一个带有上述属性的随机id。 我使用以下代码: 我之所以有一个名字,是因为以后我想点击一个类,并获得该类中的名字列表。因此,如果我在ClassStudent节点中添加(已经完成了),那么在中没有studentname的情况下,我如何能够在单击时

  • 和相应的查询解析器 这里的主要想法只是有一个过滤器,可以看到什么食谱有一些成分,用户会通过应用程序通知。 我使用数据库中的所有食谱获得了“recipe”查询,但我需要一个获取这些食谱的查询,然后使用field comprient进行筛选,例如: 食谱-糖蛋糕,配料:糖、蜂蜜、四个… 配方-天鹅绒蛋糕,配料:糖、香草、... 并且用户通知Sugar,API应该返回这2个食谱,但是如果用户通知Suga

  • 我正试图用jooq编写这个查询 我尝试了几件事,但没有成功。到目前为止,我只得到 如何将num列添加到结果中?感谢您的帮助。

  • 我试图创建一个嵌套查询,它将过滤掉一些带有特定术语的文档。在本例中,我试图过滤掉在user.first中有匹配术语的文档。数据示例: 我的查询没有得到所需的结果,因为它返回给我所有未筛选的记录。我尝试使用: 我希望这里得到与过滤器不匹配的文档。在这种情况下,它应该只返回第二个文档。做这件事的正确方法是什么?

  • 问题内容: 我有一个如下的JSON结构: 每个用户都有一个带有childByAutoId()键的元素“组”。然后,我有该应用程序中存在的所有组的列表。 每次运行该应用程序时,我都会获取当前用户登录的URL参考,并获取该用户的组列表(在这种情况下,登录的用户是具有3个组的“ rsenov”)。对于该用户所属的每个组,我都会遍历组url参考,以查找该3个组的信息。 我这样做是这样的: 我认为以这种方式

  • 问题内容: 我想使用ES进行图书搜索。因此,我决定将作者姓名和标题(作为嵌套文档)放入索引,如下所示: 我不明白的是:如何构造搜索查询,以便在搜索“一二”时仅找到第二本书,而在搜索“二三”时什么也找不到,而在搜索“一”时所有图书呢? 问题答案: 也许是这样的? 该查询基本上说一个文件必须有and 。您可以轻松地重新配置该查询。例如,如果您只想搜索作者,请删除嵌套部分。如果您想要另一本书,请更改嵌套