【问题标题】:Mongo query to find bookings within a range of dateMongo查询以查找日期范围内的预订
【发布时间】:2020-11-05 07:36:49
【问题描述】:

有一些旧的预订数据如下

{
    "_id" : ObjectId("5ec3df592d2c6146204ca8fd"),
    "space" : "5ea974b82d2c614721d69b08",
    "eventTypeId" : "5e8e0fe22d2c6104bdf55699",
    "bookingStartDate" : ISODate("2020-07-10T00:00:00.000Z"),
    "bookingEndDate" : ISODate("2020-07-12T00:00:00.000Z"),
}
{
    "_id" : ObjectId("5ec3df592d2c6146204ca8fd"),
    "space" : "5ea974b82d2c614721d69b08",
    "eventTypeId" : "5e8e0fe22d2c6104bdf55699",
    "bookingStartDate" : ISODate("2020-07-15T00:00:00.000Z"),
    "bookingEndDate" : ISODate("2020-07-17T00:00:00.000Z"),
}
{
    "_id" : ObjectId("5ec3df592d2c6146204ca8fd"),
    "space" : "5ea974b82d2c614721d69b08",
    "eventTypeId" : "5e8e0fe22d2c6104bdf55699",
    "bookingStartDate" : ISODate("2020-07-20T00:00:00.000Z"),
    "bookingEndDate" : ISODate("2020-07-26T00:00:00.000Z"),
}
{
    "_id" : ObjectId("5ec3df592d2c6146204ca8fd"),
    "space" : "5ea974b82d2c614721d69b08",
    "eventTypeId" : "5e8e0fe22d2c6104bdf55699",
    "bookingStartDate" : ISODate("2020-08-01T00:00:00.000Z"),
    "bookingEndDate" : ISODate("2020-08-05T00:00:00.000Z"),
}

现在用户需要通过传递空格,eventTypeId,newBookingStartDate和newBookingEndDate来查找新预订日期范围如2020-07-08(newBookingStartDate)到2020-07-20(newBookingEndDate)是否有旧预订

对于这种情况,我需要 Mongo 查询或 Spring Boot Mongo 查询,查询应返回集合的前三个文档

【问题讨论】:

  • 将日期转换为 UTC 时间戳,然后使用 $lte/$gte。
  • 是否有其他方法可以使用 ISO 日期查找,或者是否必须转换为 UTC :)
  • MongoDB 不存储时区,因此必须以 UTC 格式提供所有时间。

标签: java mongodb spring-boot


【解决方案1】:

这是我根据提供的收集记录尝试的查询。

var startDate = ISODate("2020-07-08T00:00:00.000Z");
var endDate = ISODate("2020-07-20T00:00:00.000Z");
db.getCollection('collectionName').find({
    "$and":[
        {"bookingStartDate":{"$gte":startDate}},
        {"bookingStartDate":{"$lte":endDate}}
    ]
});

我得到了这样的结果

/* 1 */
{
    "_id" : ObjectId("5ec3df592d2c6146204ca8fd"),
    "space" : "5ea974b82d2c614721d69b08",
    "eventTypeId" : "5e8e0fe22d2c6104bdf55699",
    "bookingStartDate" : ISODate("2020-07-10T00:00:00.000Z"),
    "bookingEndDate" : ISODate("2020-07-12T00:00:00.000Z")
}

/* 2 */
{
    "_id" : ObjectId("5ec3df592d2c6146204ca8fc"),
    "space" : "5ea974b82d2c614721d69b08",
    "eventTypeId" : "5e8e0fe22d2c6104bdf55699",
    "bookingStartDate" : ISODate("2020-07-15T00:00:00.000Z"),
    "bookingEndDate" : ISODate("2020-07-17T00:00:00.000Z")
}

/* 3 */
{
    "_id" : ObjectId("5ec3df592d2c6146204ca8f8"),
    "space" : "5ea974b82d2c614721d69b08",
    "eventTypeId" : "5e8e0fe22d2c6104bdf55699",
    "bookingStartDate" : ISODate("2020-07-20T00:00:00.000Z"),
    "bookingEndDate" : ISODate("2020-07-26T00:00:00.000Z")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 2016-09-22
    相关资源
    最近更新 更多