mongoDB复杂查询查找内部文档列表的总和

时间:2013-06-07 17:25:32

标签: mongodb

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

1 个答案:

答案 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支持聚合框架。

另请注意,如果数据量很大,您需要一个适当的索引来支持这一点(例如datedate + headers.header上的索引) 。