Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MongoDB中找到与另一个日期范围重叠的所有日期范围?_Mongodb - Fatal编程技术网

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

如何在MongoDB中找到与另一个日期范围重叠的所有日期范围?,mongodb,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 } 我做调度系统。我有一段时间没在那里。我相信您正在查找日期范围重叠的文档。换句话说,开始或结束日期介于给定日期范围之间的任何文档 您完全可

各位!

我有这类记录:

{
    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
}

我做调度系统。我有一段时间没在那里。我相信您正在查找日期范围重叠的文档。换句话说,
开始
结束
日期介于给定日期范围之间的任何文档

您完全可以通过少量的匹配和逻辑来实现这一点

假设我收集了两份文件

{ 
    "_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());
我明白了


这是给定日期范围内的重叠文档。希望一切都有意义。为了获得最佳性能,我建议在
开始
结束
字段上都设置索引。

我不确定是否正确理解了您的问题。究竟什么是“跨越期”?这些代码片段之一是您的查询吗?或者两者都来自不同的文档,并且您希望找到日期范围重叠的文档?应该很明显,没有人回答的原因是因为OP不是这样问的。他们只是希望“识别”数据中出现的任何“重叠”。因此,显示上面的两个记录“重叠”,而不查询特定的时间范围。
[
    {
        "_id" : ObjectId("56f6928c0c96eddb0a2c287f"), 
        "start" : "2015-03-27T16:00:00.000Z", 
        "end" : "2015-03-27T27:00:00.000Z"
    }
]