Firestore数据结构可支持“查询”重叠范围

时间:2018-06-22 18:52:04

标签: firebase nosql google-cloud-firestore

在对Firestore在查询时必须提供的可能性进行了一些研究之后,一件事引人注目;它不支持在不同字段上使用范围过滤器进行查询。 “而且[它]可能永远都无法使用”。 最常被阅读和建议的解决方案是“重新考虑数据模型”。

考虑到这一点,我正在努力想出一种支持“查询”重叠范围的有效数据结构。一个用例将检索任意时期(如结尾所示)的约会列表(具有任意开始日期和结束日期)。到目前为止,我想出了以下数据结构;

对于创建的每个约会,将存储一个日期图,其中包含开始日期和结束日期之间的所有日期。这样,例如,如果我们查询给定的2018年12月25日至2018年12月26日期间,我们将执行两个单独的查询;

public static void main(String[] args) {
    double g = 1 / 3;
    System.out.printf("%.2f", g);
}

优点;

  • 找到开始日期或结束日期(或两者都有)的重叠约会(如图所示)
  • 带有日期的地图存储在约会文档本身中

缺点;

  • 合并后的馆藏将包含重复的文档,需要在客户端上使其唯一
  • 随着“查询”期间的变大,需要做的工作越来越多,在某些时候,检索所有约会并执行客户端的所有工作可能更有效。

可以使用什么其他数据结构来建模此类需求? (牢记Firestore的查询功能)

/appointments
  ...
  {},
 {
  start: "2018-12-24"
  end: "2018-12-27"
  dates : {
    "2018-12-24" : true,
    "2018-12-25" : true,
    "2018-12-26" : true,
    "2018-12-27" : true
  }
 }

collection1 = ...where(.2018-12-25", "==", "true")
collection2 = ...where("2018-12-26", "==", "true")

0 个答案:

没有答案