2017-11-19 11 views
2

開始日と終了日を含むデータのリストがあります。指定した期間に応じて選択したデータをフェッチします。mongoseで開始日と終了日を含むデータの範囲を選択する方法

/* 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") 
} 

日スタートフェッチした場合 - それはR1、R2およびR4を選択しなければならない「2017年11月16日」と終了日、「2017年11月21日」を、このマングースクエリ

+0

なぜ結果セットにR2があると思いますか?必要な日付範囲は2017-11-16から2017-11-21までですが、R3は開始日と終了日として2017-11-10と2017-11-25です。明確にしてください.. – amanpurohit

+0

これは、指定された持続時間のためのいくつかのリソース割り当てに関するもので、次にR2も範囲内で利用できないので、私の解決策でそれを取得する必要があります。 –

答えて

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") }}]} 
]}) 
関連する問題