我有包含开始和结束日期的数据列表,我想根据给定的日期范围获取所选数据。
/* 1 */
{
"_id" : ObjectId("5a10dfd83aa9c689cb838e4d"),
"name" : "R1",
"startDate" : ISODate("2017-11-17T20:58:57.191Z"),
"endDate" : ISODate("2017-11-20T20:58:57.191Z")
}
/* 2 */
{
"_id" : ObjectId("5a10e0093aa9c689cb838e8e"),
"name" : "R2",
"startDate" : ISODate("2017-11-10T20:58:57.191Z"),
"endDate" : ISODate("2017-11-25T20:58:57.191Z")
}
/* 3 */
{
"_id" : ObjectId("5a10e02e3aa9c689cb838ec4"),
"name" : "R3",
"startDate" : ISODate("2017-11-25T20:58:57.191Z"),
"endDate" : ISODate("2017-11-27T20:58:57.191Z")
}
/* 4 */
{
"_id" : ObjectId("5a10e06c3aa9c689cb838f18"),
"name" : "R4",
"startDate" : ISODate("2017-11-15T20:58:57.191Z"),
"endDate" : ISODate("2017-11-18T20:58:57.191Z")
}
如果获取开始日期 - “2017-11-16”和结束日期“2017-11-21”则应选择R1,R2和R4,请帮我实现此mongoose查询
答案 0 :(得分:3)
您可以使用以下查询来获得此结果,这可能有所帮助。
db.getCollection.find({ $or: [
{ $and: [{"startDate": {"$lte":ISODate("2017-11-16T20:58:57.191Z")}},{ "endDate": {"$gte": ISODate("2017-11-21T20:58:57.191Z") }}]},
{ $and: [{"startDate": {"$lte":ISODate("2017-11-16T20:58:57.191Z")}},{ "endDate": {"$gte": ISODate("2017-11-16T20:58:57.191Z") }}]},
{ $and: [{"startDate": {"$lte":ISODate("2017-11-21T20:58:57.191Z")}},{ "endDate": {"$gte": ISODate("2017-11-21T20:58:57.191Z") }}]},
{ $and: [{"startDate": {"$gte":ISODate("2017-11-16T20:58:57.191Z")}},{ "endDate": {"$lte": ISODate("2017-11-21T20:58:57.191Z") }}]}
]})