mongodb日期范围查询获取具有startDate&endDate的记录

mongodb日期范围查询获取具有startDate&endDate的记录

问题描述:

我对mongodb比较陌生。我们有一个集合中有startDate和endDate的文档。什么是最好的方式来查询只有那些startDate和endDate文件在另一个日期范围。mongodb日期范围查询获取具有startDate&endDate的记录

比方说,我们在报告阵列下面的子文件:

{reports: [ 
{ 
    "startDate" : ISODate("2017-07-02T00:00:00Z"), 
    "endDate" : ISODate("2017-07-08T00:00:00Z"), 
    "data" : [ ] 
}, 
{ 
    "startDate" : ISODate("2017-07-09T00:00:00Z"), 
    "endDate" : ISODate("2017-07-15T00:00:00Z"), 
    "data" : [ ] }, 
{ 
    "startDate" : ISODate("2017-07-16T00:00:00Z"), 
    "endDate" : ISODate("2017-07-22T00:00:00Z"), 
    "data" : [ ] } 
]}  

现在我想查询只子文档2017年7月1日和2017年7月16日之间的报告阵列英寸在结果 预期的子文件应该是:

[{ 
"startDate" : ISODate("2017-07-02T00:00:00Z"), 
"endDate" : ISODate("2017-07-08T00:00:00Z"), 
"data" : [ ] 
}, 
{ 
"startDate" : ISODate("2017-07-09T00:00:00Z"), 
"endDate" : ISODate("2017-07-15T00:00:00Z"), 
"data" : [ ] }] 

我也做了查询的聚集和突出部分。它似乎工作正确。 唯一的问题是我应该在过滤器中使用什么样的条件。这里是Iam尝试使用但不给我预期结果的查询的过滤器部分:

{$filter: { 
    input: "$reports", as: "reports", 
    cond: {$and: 
    [{ $gte: ["$$reports.startDate", new Date("2017-07-02") ]}, 
    { $lte: ["$$reports.endDate", new Date("2017-07-08") 
]}]}}} 

您的解决方案已关闭。

db.DailyReports.aggregate([{ 
    $project: { 
    reports: { 
     $filter: { 
     input: '$reports', 
     as: 'report', 
     cond: { 
      $and: [ 
      { $gte: [ '$$report.startDate', new ISODate('2017-07-02') ] }, 
      { $lte: [ '$$report.endDate', new ISODate('2017-07-08') ] } 
      ] 
     } 
     } 
    } 
    } 
}]) 
+0

为什么它不能正常使用JS日期对象:) – user22197