Firebase,在数据库级别筛选结果

Firebase,在数据库级别筛选结果,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我们正在运行一个包含一些地图的项目 我们在节点下有以下内容: root.maps //object root.maps.$mapId.config.isPrivate //boolean root.maps.$mapId.config.uid //string 这是一个地图列表,以防有些是私人的,有些是公共的。位于节点下的: root.maps //object root.maps.$mapId.config.isPrivate //boolean root.maps.$mapId.con

我们正在运行一个包含一些地图的项目

我们在节点下有以下内容:

root.maps //object
root.maps.$mapId.config.isPrivate //boolean
root.maps.$mapId.config.uid //string
这是一个地图列表,以防有些是私人的,有些是公共的。位于节点下的:

root.maps //object
root.maps.$mapId.config.isPrivate //boolean
root.maps.$mapId.config.uid //string
现在我们有一个问题。我们在maps节点上侦听更改,但我们只想返回用户的公共节点和私有节点

所以我们增加了规则,但似乎不起作用。地图要么全部显示,要么不显示。当我们试图对地图本身设置限制时,它不起作用

现在,在互联网上进行了一些搜索之后,我们了解到为了更好地管理安全规则,应该将私有和公共地图移动到私有或公共节点

就这样

root.maps.private.$mapId.uid
root.maps.public.$mapId.uid
我不敢相信这是真的。为了改变这个布尔值,我们必须将整个节点从公共节点移动到私有节点

这个数据库真的应该这样工作吗?对我来说,这听起来根本不符合逻辑

关于如何根据规则筛选此数据,是否有其他方法(客户端不应知道映射,客户端筛选不是选项)

如果基于改变布尔值移动完整节点的奇怪情况真的成立的话


背后的想法是什么?这不可能是真的,对吗?

如果没有看到您的规则和失败的代码,就很难确定。但听起来好像您正在尝试筛选列表中的项目,这在Firebase数据库安全规则中是不可能的。看,这或是其中的一个。除了这些抽象概念,没有什么可以展示的了。你提供的链接也是我提到的答案。他们说我们需要一个公共分支和一个私人分支,并将id放入其中,或者在它发生变化时将其删除。我一直认为这是一种使用数据库的奇怪方式,可能是我的怀旧之情,但firebase的流量太差了。首先创建数据库,确保一切正常,最后它会把你搞砸,因为从一个古老的角度来看,规则缺乏每一点逻辑。无论如何,谢谢你,我现在跳过它。过滤firebase的性能不是很好。我建议将其与elasticsearch结合使用。。它就像上面提到的charmAs@FrankvanPuffelen一样工作,规则不是过滤器,虽然尝试使用它们是很有诱惑力的,但这不是一个好的解决方案。筛选结果取决于Firebase结构-某些结构比其他结构更适合被筛选。您询问我们只想返回用户的公共节点和私有节点的状态。。你能澄清一下这个需求吗,就像你正在返回这两个一样,你想过滤什么?在项目开始时,我们创建了抽象对象“映射”。当时每个人都可以阅读地图,它们存储在:root.Maps下。现在有一个要求的变化,其中一些应该是私人的。因此,我们向对象本身添加了isPrivate布尔值。但是为了更好地保护这一点,数据库需要进行过滤,因为如果客户机进行过滤,所有信息都将在客户机上,这是不应该发生的。所以有一个分歧。有些是公开的,有些是私人的,所以有些不应该出现在客户面前。