我在MongoDB里有这个收藏:
[
{ _id: "...", "project": 244, "scanner": "sonarqube", "version": 1 },
{ _id: "...", "project": 244, "scanner": "sonarqube", "version": 2 },
{ _id: "...", "project": 244, "scanner": "sonarqube", "version": 2 },
{ _id: "...", "project": 244, "scanner": "shellcheck", "version": 1 },
{ _id: "...", "project": 244, "scanner": "shellcheck", "version": 2 },
{ _id: "...", "project": 244, "scanner": "shellcheck", "version": 3 },
{ _id: "...", "project": 244, "scanner": "powershell", "version": 2 },
{ _id: "...", "project": 244, "scanner": "powershell", "version": 3 },
{ _id: "...", "project": 244, "scanner": "powershell", "version": 4 },
{ _id: "...", "project": 244, "scanner": "powershell", "version": 4 }
]我想返回按扫描器分组的项目数,并提供最新(最高)版本:
{ scanner: "sonarqube", count: 2 }, // All items with sonarqube and version: 2
{ scanner: "shellcheck", count: 1 }, // All items with shellcheck and version: 3
{ scanner: "powershell", count: 2 } // All items with powershell and version: 4到目前为止,我说的是:
db.getCollection("vulnerabilities").aggregate([
{
$match: { project_id: 422 }
},
{
$sort: { version: -1 }
},
{
$group: {
_id: "$scanner",
'count': { $first: "$version"},
}
}
])这将返回每个组的最新(最高)版本:
sonarqube | 2 |
shellcheck | 3 |
powershell | 4 |现在,我要告诉蒙戈:
有什么建议吗?
谢谢
发布于 2022-02-03 23:47:59
最简单的方法可能是先获得计数,然后再按版本排序:
db.getCollection("vulnerabilities").aggregate([
{
$match: { project_id: 422 }
},
{
$group:{
_id: { scanner: "$scanner", version: "$version"},
count: { $sum: 1 }
}
},
{
$sort: { "_id.version": -1 }
},
{
$group: {
_id: "$_id.scanner",
count: { $first: "$count" },
version: { $first: "$_id.version" }
}
}
])发布于 2022-02-04 03:23:41
您可以在$max阶段使用$group
db.test.aggregate([
{$group : {_id : "$scanner", count : {$sum : 1}, version : {$max : "$version"}}}
])或者您可以按版本进行$sort并使用$first
db.test.aggregate([
{$sort : {version: -1}},
{$group : {_id : "$scanner", count : {$sum : 1}, version : {$first : "$version"}}}
])https://stackoverflow.com/questions/70979781
复制相似问题