Firestore按日期和时间分别查询

时间:2019-02-04 14:03:00

标签: javascript firebase google-cloud-firestore

如何按特定的日期和时间范围查询文档?就是我想按特定日期范围(01-01-2019-31-01-2019)查询文档,并且从这些日期开始仅查询上午10点至下午12点的文档。

它会变成这样:

let ref = db.collection('events')

// Query by date range
ref = ref
  .where('created', '>=', new Date(2019, 1, 1, 10, 0, 0, 0))
  .where('created', '<=', new Date(2019, 1, 1, 12, 0, 0, 0))

// Query by time range in each date
ref = ref
  .where('created', '>=', *START TIME = 10pm*)
  .where('created', '<=', *END TIME = 12pm*)

所以问题是我每天如何过滤查询的小时和分钟?希望你明白我在这里问的!如有需要,我将更新问题。

更新 数据库结构正在关注

/ events / {单个事件文档}:

{
  cafeId: String,
  created: Firestore timestamp // ex. February 2, 2019 at 10:16:00 AM UTC+2
  discount: Number,
  eventId: Number,
  productCount: Number,
  keywords: Array,
  products: Map,
  payment: Map,
  returned: Number,
  total: Number
}

当我在客户端创建此文件时,它将转换为:

{ _seconds: Number, _nanoseconds: 0 }

1 个答案:

答案 0 :(得分:2)

如果要使用“标准” where()方法,则可能必须从

接收到的结果中对前端进行第二次过滤。
ref = ref
  .where('created', '>=', new Date(2019, 1, 1, 10, 0, 0, 0))
  .where('created', '<=', new Date(2019, 3, 1, 12, 0, 0, 0))

另一种方法是在一个额外的字段(例如createdText)中以自定义格式(例如YYYYMMDDHHMM)以24小时格式存储您的日期/时间值(即HH)。

这样,文档将被正确排序,并且您只能使用一个where进行查询,如下所示:

ref = ref
  .where('createdText', '>=', '201902031000')
  .where('createdText', '<=', '201902041200')

在NoSQL数据库中复制数据非常普遍,尤其是允许根据您的业务需求进行查询。