我正在尝试构建一个基于mongoDB的应用程序并陷入一个用例。 我想找到特定日期范围之间的文件总和。以下是我的样本集。
db.matrix.findOne()
{
"_id": "varun_2013-06-06",
"loginId": "varun",
"date": ISODate("2013-06-05T18:30:00Z"),
"headers": [{
"header": "header1"
"time": 2,
"detail": "x"
}, {
"header": header2 "time": 4,
"detail": "y"
}, {
"header": "header3"
"time": 6,
"detail": "z"
}, {
"header": "header4",
"time": 9,
"detail": "a"
}
]
}
因此,对于特定范围,我的查询应该给出每个标题的总和。 喜欢从日期到日期 header1 = 40hr header2 = 60hr等......
任何人都可以帮我在mongodb中查找此用例的查询。我在春天使用mongoTemplate。并且{ "header" : "header1" "time" : 2, "detail" : "x" }
是主要课程中的List<T>
答案 0 :(得分:0)
您需要的聚合管道是这样的:
var startDate = new ISODate(...);
var endDate = new ISODate(...);
col.aggregate([
// filter by date range
{ $match: { date: { $gte: startDate, $lte: endDate } },
// unwind embedded headers collection so we have one item per header
{ $unwind: '$headers' },
// group by header and output a total
{ $group: { _id: '$headers.header', total: { sum: 1 } }
]);
我不知道如何在Spring中执行此操作,但它应该基本相同,假设Spring支持聚合框架。
另请注意,如果数据量很大,您需要一个适当的索引来支持这一点(例如date
或date
+ headers.header
上的索引) 。