如何在mongose中选择包含开始日期和结束日期的数据范围

时间:2017-11-19 02:42:12

标签: mongodb mongoose

我有包含开始和结束日期的数据列表,我想根据给定的日期范围获取所选数据。

/* 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查询

1 个答案:

答案 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") }}]}
]})