首页 > 解决方案 > Spring Boot MongoDb 仅按时间过滤

问题描述

实际上,我将约会存储在 MongoDB 集合中。每个约会都有开始和结束日期

例子:startDate: 2021-03-02T06:00:00.000+00:00, endDate: 2021-03-02T07:00:00.000+00:00

实际上我有一个小框架,它能够为我创建一个复杂的标准来过滤其他属性的约会。我想继续使用它。该框架根据 GET API 的请求参数创建标准列表。最后,它将所有标准与 AND 操作结合起来。

实际上,我们可以通过以下方式获得两个日期之间的所有约会:

/**
   * The appointment is scheduled after the given time.
   * 
   * @param time
   * @return
   */
  public AppointmentFilter scheduledAfter(OffsetDateTime time) {
    Preconditions.checkNotNull(time);
    return this.addCriteria(new Criteria().orOperator( //
        Criteria.where("startDate").gte(time), //
        Criteria.where("endDate").gt(time)));
  }

  /**
   * The appointment is scheduled before the given time.
   * 
   * @param time
   * @return
   */
  public AppointmentFilter scheduledBefore(OffsetDateTime time) {
    Preconditions.checkNotNull(time);
    return this.addCriteria(new Criteria().orOperator( //
        Criteria.where("startDate").lte(time), //
        Criteria.where("endDate").lt(time)));
  }

实际上,我们还必须提供按时间段缩小返回的约会列表的可能性。

这意味着我必须获得计划在 09:00 和 10:00之间的两个日期(通过上述方法)之间的所有约会。

为此,我必须创建一个标准,它只考虑存储约会的开始和结束日期的时间(小时、分钟、秒等)。

我通过聚合发现了某种极其复杂的解决方案,但框架不支持聚合(还)。虽然我能够单独汇总开始和结束日期的小时、分钟等,但所需的标准将非常复杂。

是否有任何其他方法可以创建Criteria仅考虑日期时间的(如上所述)?

我想java.time.OffsetTime用作他们的输入。那将是合理的输入。

非常感谢您的帮助,祝您有美好的一天!

标签: mongodbspring-bootdatetimefilter

解决方案


推荐阅读