"不同字段的范围过滤器"限制的解决方法?

Ste*_*röm 7 firebase google-cloud-firestore

新手到这里的firestore,并努力克服不同领域限制范围过滤器.

用例是存储和检索日历解决方案的事件/事件数据.

日历视图可以是不同的周,月等,即,每个特定视图具有定义的开始和结束时间戳.

存储事件具有开始时间戳和结束时间戳.

我需要查询所有开始,结束或跨越视图开始和结束时间戳的事件.

使用sql后端实现这一点很简单,但是对于firestore,不同字段上的范围过滤器似乎使这个变得不可能吗?有什么想法可以解决这个问题吗?或者是否计划在firestore中支持此类功能?

BR Stefan

Mat*_*ttC 6

当我第一次遇到这个问题时,它有助于首先理解为什么存在这个限制。是的,这在 SQL 数据库中可能是微不足道的,但 SQL 数据库不会像 Firestore 那样扩展。Firestore 可能由Google Big Table支持,由于索引的工作方式,当范围过滤器用于不同的属性时,它不会缩放。本质上,Firestore 不会让您做一些会在您的应用扩展时困扰您的事情。

我可以为您看到的最佳选择是执行两个查询,然后将结果组合在一个集合中。这是一些 sudo 代码:

let eventsStartingIn2017 = calendar_events.where("start_date", ">=", "1/1/2017").where("start_date", "<=", "31/12/2017")
let eventsEndingIn2017 = calendar_events.where("end_date", ">=", "1/1/2017").where("end_date", "<=", "31/12/2017")

let 2017Events = new Set();
2017Events.add(eventsStartingIn2017);
2017Events.add(eventsEndingIn2017);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的解决方案。但是我认为这个解释是无效的,因为有 NoSQL 数据库(例如 MongoDB)允许在不同字段上进行范围过滤,同时又不牺牲可扩展性。此外,我找不到任何文档说Firestore是由BigTable支持的。谷歌确实将它们视为[两个不同的数据库](https://cloud.google.com/products/databases)。 (4认同)