如何找到与MongoDB中另一个日期范围重叠的所有日期范围?

时间:2016-03-26 12:52:04

标签: mongodb

大家好!

我有这种类型的记录:

{
    start: 2015-03-27T15:00:00.000Z,
    end: 2015-03-27T17:00:00.000Z
}

并尝试在数据库中查找过渡期。

{
    start: 2015-03-27T15:30:00.000Z,
    end: 2015-03-27T16:00:00.000Z
}

我做调度系统。我在那里度过了一段时间。

1 个答案:

答案 0 :(得分:0)

我相信您正在尝试查找具有重叠日期范围的文档。换句话说,end{ "_id" : ObjectId("56f692730c96eddb0a2c287e"), "start" : "2015-03-27T15:00:00.000Z", "end" : "2015-03-27T17:00:00.000Z" } { "_id" : ObjectId("56f6928c0c96eddb0a2c287f"), "start" : "2015-03-27T16:00:00.000Z", "end" : "2015-03-27T27:00:00.000Z" } 日期落在给定日期范围之间的任何文档。

你可以通过一点点匹配和逻辑来实现这一点。

假设我的收藏中有两个文件

var startDate = "2015-03-27T20:00:00.000Z";
var endDate = "2015-03-27T21:00:00.000Z";

var findOverlapingDates = function(startDate, endDate){
  return db.collection.find({
     $or: [
        {$and: [
          {start:{$gte: startDate}}, {start:{$lte: endDate}}
        ]},
        {start:{$lte: startDate}, end:{$gte: startDate}}
     ]
  });
};

printjson(findOverlapingDates(startDate, endDate).toArray());

当我执行以下代码时

[
    {
        "_id" : ObjectId("56f6928c0c96eddb0a2c287f"), 
        "start" : "2015-03-27T16:00:00.000Z", 
        "end" : "2015-03-27T27:00:00.000Z"
    }
]

我得到了

start

对于给定的日期范围,哪个是重叠文档。希望这一切都有道理。为了获得最佳效果,我建议您在end#slide3 { background-color: #fff; color: #333333; height: 100%; padding: 20px; overflow: hidden; } 字段都有索引。