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') ] }
]
}
}
}
}
}])
为什么它不能正常使用JS日期对象:) – user22197