mongodb: 查询日历模型中的空闲时间段。

问题描述 投票:0回答:1

我有一个日历模型,其模式如下(用于存储相邻时间段的车辆状态)

  const calendarSchema = new Schema( {
      vehicleId: String,
      startTime: Date,
      endTime: Date,
      availability: {type:String, enum: [ 'Available', 'Booked', 'Partially_Available']
})

现在我想搜索的车辆,要么是 AvailablePartially_Available 之间 2021-01-01T12:00:002021-01-01T15:00:00

对于vehicleId:123,我有以下文件在集合中。

{
   vehicleId:123,
   startTime: 2021-01-01T12:00:00,
   endTime: 2021-01-01T13:00:00
   availability: 'Available'
},

{
   vehicleId:123,
   startTime: 2021-01-01T13:00:00,
   endTime: 2021-01-01T14:00:00
   availability: 'Partially_Available'
}
{
   vehicleId:123,
   startTime: 2021-01-01T14:00:00,
   endTime: 2021-01-01T15:00:00
   availability: 'Available'
}

现在我如何写查询,使我得到 vehicleId的,要么是 AvailableParitally_Available 之间 2021-01-01T12:00:002021-01-01T15:00:00

这意味着如果任何车辆有 Booked 在这两个时间段之间的任何时间段,它不应该出现在结果中。 对于上述情况 vehicleId:123 应出现在结果中。如果上述任何一个条目有状态 Booked, vehicleId:123 不应出现在结果中。

先谢谢你的建议。我这几天一直在绞尽脑汁地寻找解决方案,但还没有找到。

node.js mongodb mongodb-query aggregation-framework
1个回答
0
投票

试试这个

db.collection.find({
  availability: {
    $in: [ "Available", "Partially_Available" ]
  },
  startTime: {
    $gte: ISODate("2021-01-01T12:00:00.000Z")
  },
  endTime: {
    $lte: ISODate("2021-01-01T15:00:00.000Z")
  }
})

你可以在这里测试 艋舺游乐场

© www.soinside.com 2019 - 2024. All rights reserved.