我有一个预订系列。在该集合中,我已经调试了一个文档:
{
"_id": ObjectID("55d7608120b345d2cc7c9f45"),
"name": "booking1",
"start": ISODate("2015-01-10T00:00:00.000Z"),
"end": ISODate("2015-01-20T00:00:00.000Z")}
现在我有第二个日期范围,想要检查日期范围B是否与其中一个预订文件重叠。
我的查询是:
db.booking.find({$or:[{"start":{$gt:ISODate("2015-01-15T00:00:00.000Z")}},{"end":{$lt:ISODate("2015-01-25T00:00:00.000Z")}}]});
当我执行它时有时我会得到一个结果,当我在查询中更改日期时,我得不到任何结果。这不是逻辑!我不知道查询是否正确,或者我应该改变策略。
我的应用程序是Node JS + Express + MongoClient环境。
我希望得到答案, 谢谢所有问候DroidSheep
答案 0 :(得分:0)
这个查询怎么样?
db.booking.find({ $or: [
{ start : { $lte: ISODate("2015-01-15T00:00:00.000Z") }, end : { $gte: ISODate("2015-01-15T00:00:00.000Z") } },
{ start : { $lte: ISODate("2015-01-25T00:00:00.000Z") }, end : { $gte: ISODate("2015-01-25T00:00:00.000Z") } },
{ start : { $gt: ISODate("2015-01-15T00:00:00.000Z") }, end : { $lt: ISODate("2015-01-25T00:00:00.000Z") } }
]});
它检查日期范围B的开始是否在查询的文档日期范围内,或者日期范围B的结尾是否在查询的文档日期范围内,或者日期范围B在查询的文档日期范围之前和结束之后开始检查
答案 1 :(得分:0)
我已经尝试过它看起来不错,但是当我执行此查询时:
{ $or: [
{ start : { $lte: ISODate("2015-01-5T00:00:00.000Z") }, end : { $gt: ISODate("2015-01-5T00:00:00.000Z") } },
{ start : { $lt: ISODate("2015-01-10T00:00:00.000Z") }, end : { $gte: ISODate("2015-01-10T00:00:00.000Z") } },
{ start : { $gt: ISODate("2015-01-5T00:00:00.000Z") }, end : { $lt: ISODate("2015-01-10T00:00:00.000Z") } }
]}
mongo没有回复我的文件。我已尝试过多种解决方案,但mongo没有向我展示文档!但是谢谢你第一次查询sheilak。问候DroidSheep
编辑:我的文件:
{
"_id": ObjectID("55d78c3720b345d2cc7c9f49"),
"name": "test_booking",
"start": ISODate("2015-01-10T00:00:00.000Z"),
"end": ISODate("2015-01-20T00:00:00.000Z")
}
编辑编辑: 我做了一个像这样的解决方法:
{ $or: [
{ start : { $lte: ISODate("2015-01-01T00:00:00.000Z") }, end : { $gt: ISODate("2015-01-01T00:00:00.000Z") } },
{ start : { $lt: ISODate("2015-01-10T00:00:00.000Z") }, end : { $gte: ISODate("2015-01-10T00:00:00.000Z") } },
{ start : { $gt: ISODate("2015-01-01T00:00:00.000Z") }, end : { $lt: ISODate("2015-01-10T00:00:00.000Z") } },
{ start : ISODate("2015-01-10T00:00:00.000Z")},
{ end : ISODate("2015-01-01T00:00:00.000Z")}
]}
是不是?你能检查一下吗?问候DroidSheep