首页 > 解决方案 > 在 Firestore 中,如何查询具有数字范围的项目的数字范围

问题描述

我试图在 Firestore 中找出查询一周日期数据的最佳方法。我有跨越多天的对象,我想知道哪些元素是特定时间跨度的一部分。现在我的数据有一个开始和结束日期,由它们的 unix ms 值表示。有些在查询开始日期之前开始,有些在查询结束日期之后结束。我如何正确查询或正确非规范化数据。

例如,我想检索本月 10 月发生的所有项目。有些元素的开始日期可能是 9 月 30 日 - 10 月 2 日,有些可能是 10 月 31 日 - 11 月 2 日。我如何构建/查询我的数据以包含那些边缘情况?

 {
  active: true,
  address: {
    addressLine1: "5 May Way",
    city: "Wilmington",
    state: "Ny",
    zip: "40778"
  },
  createdOn: 1570558984758,
  day: 1570507200000,
  event: {
    startDate: 1570558945155,
    endDate: 1570559945160,
    utcOffset: -240
  },
  id: "6FXSCc8BFqww59PT0HyE",
  name: "Test",
  portalId: "iHvdmHxsQsQvoaQIO0r4",
  statusId: 0,
}

标签: firebasegoogle-cloud-firestore

解决方案


从我的脑海中,您可能会包含一个字段,表示事件发生的月份(例如occurrence)。该字段将是一个数组,您可以查询该事件是否发生在特定月份,您可以使用一个where子句,该字段将包含您要查找的月份。类似的东西where('occurrence', 'array-contains', 'October')

也就是说,您可以将event数组添加到您的字段中occurrence,它看起来像这样:

event: {
    startDate: xxxxxxxxx,
    endDate: xxxxxxxxx,
    utcOffset: xxx,
    ocurrence: [September, October]
}

这将处理常规和边缘情况。


推荐阅读