gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:55:53 31 4
gpt4 key购买 nike

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

因此对于特定范围,我的查询应该给出每个 header 的总和。像从日期到日期header1 = 40hr header2 = 60hr 等等....

谁能帮我在 mongodb 中找到这个用例的查询。我在 Spring 使用 mongoTemplate 。和 { "header" : "header1" "time" : 2, "detail" : "x" }List<T>在主类中

最佳答案

您需要的聚合管道是这样的:

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

关于mongoDB复杂查询以查找内部文档列表的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16989738/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com