3

我正在尝试构建一个基于 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"
        }
    ]
}

因此,对于特定范围,我的查询应该给出每个标题的总和。比如 fromDate to toDate header1 = 40hr header2 = 60hr 等等....

谁能帮我在 mongodb 中查找此用例的查询。我在春天使用 mongoTemplate。并且{ "header" : "header1" "time" : 2, "detail" : "x" }List<T>内部 Main 类

4

1 回答 1

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)。

于 2014-01-27T18:10:08.040 回答