【发布时间】:2020-05-17 14:32:04
【问题描述】:
我有类似这样的文件
{
"_id": "5e3334cede31d9555e38dbee",
"time": 400,
"datetime": "2020-01-05T16:35:42.315Z",
"version": "2.0.30",
"hostname": "bvasilchik-lt.extron.com",
"testfile": "cards.txt",
"tests": 5,
"failures": 3,
"skips": 0,
"status": "Failed",
"__v": 0
}
我想创建一个结果,其中包含每个 testfile 名称使用次数最多的文档,所以如果前 10 个都是相同的 testfile 名称,我只想显示具有相同测试文件名的顶级文件。
我已经这样做了,但我还想包含另一个字段,该字段也显示与该分组匹配的测试数量,但我发现的唯一方法是添加 $first 或 $last 或 $max 或 $min对于测试字段,但这是不正确的,因为最高时间可能有不同数量的测试。
我也在匹配特定日期范围内的结果
const times = await Suite.aggregate([
{
"$match": {
datetime: { "$gte": dateRange.startDate, "$lt": dateRange.endDate, }
}
},
{
"$group": {
_id: "$testfile",
time: { "$max" : "$time" },
}
},
{
"$sort": {
time: order
}
},
{
"$project": {
_id: 0,
testfile: "$_id",
time: "$time"
}
}
])
这会产生这些结果
[
{
"testfile": "lists.txt",
"time": 900
},
{
"testfile": "buttons.txt",
"time": 800
},
{
"testfile": "cards.txt",
"time": 400
},
{
"testfile": "popover.txt",
"time": 300
},
{
"testfile": "about-pages.neb",
"time": 76
}
]
但我希望它返回的是
[
{
"testfile": "lists.txt",
"tests": 5,
"time": 900
},
{
"testfile": "buttons.txt",
"tests": 4,
"time": 800
},
{
"testfile": "cards.txt",
"tests": 8,
"time": 400
},
{
"testfile": "popover.txt",
"tests": 1,
"time": 300
},
{
"testfile": "about-pages.neb",
"tests": 2,
"time": 76
}
]
【问题讨论】:
标签: mongodb aggregate grouping aggregate-functions