【问题标题】:Workaround for "Range filters on different fields" limitation?“不同字段上的范围过滤器”限制的解决方法?
【发布时间】:2017-12-29 19:14:24
【问题描述】:

新手在这里存储并努力克服不同字段限制的范围过滤器。

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

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

存储的事件有一个开始时间戳和一个结束时间戳。

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

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

BR 斯蒂芬

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    当我第一次遇到这个问题时,它有助于首先理解为什么存在这个限制。是的,这在 SQL 数据库中可能是微不足道的,但 SQL 数据库不会像 Firestore 那样扩展。 Firestore 可能由Google Big Table 支持,because of the way that indexing works 在不同属性上使用范围过滤器时将无法扩展。从本质上讲,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);
    

    【讨论】:

    • 感谢您的解决方案。但是我认为解释是无效的,因为有 NoSQL 数据库(例如 MongoDB)允许在不同字段上进行范围过滤,同时不牺牲可伸缩性。此外,我找不到任何说明 Firestore 由 BigTable 支持的文件。 Google 确实将它们视为two different databases
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 2019-01-08
    • 2018-09-24
    • 2018-05-19
    • 2020-11-18
    相关资源
    最近更新 更多