首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB:获取不同组之间值最高的文档的计数

MongoDB:获取不同组之间值最高的文档的计数
EN

Stack Overflow用户
提问于 2022-06-16 23:49:38
回答 1查看 24关注 0票数 0

我正面临着MongoDB的一个问题。我需要计数所有按字段分组的文档,这些字段具有另一个字段的最高值。

我举个例子:

代码语言:javascript
复制
{ id: 1, scanner: 'bandit', severity: 'low', version: 1 },
{ id: 2, scanner: 'bandit', severity: 'low', version: 1 },
{ id: 3, scanner: 'bandit', severity: 'medium', version: 1 },
{ id: 4, scanner: 'bandit', severity: 'medium', version: 2 },
{ id: 5, scanner: 'bandit', severity: 'high', version: 2 },
{ id: 6, scanner: 'semgrep', severity: 'critical', version: 2 },
{ id: 7, scanner: 'semgrep', severity: 'critical', version: 3 },
{ id: 8, scanner: 'semgrep', severity: 'info', version: 4 },
{ id: 9, scanner: 'semgrep', severity: 'info', version: 4 },

在本例中,我们有两个扫描器(banditsemgrep)。

“强盗”文档的最高版本是2,而"semgrep“文档的最高版本是4

我需要根据扫描仪和严重性对它们进行分组,这取决于它们的最高版本,忽略了以前的版本,并对它们进行计数。

其结果应与此类似:

代码语言:javascript
复制
[
    { "scanner": "bandit", "severity": "medium", "count": 1, "version": 2 },
    { "scanner": "bandit", "severity": "high", "count": 1, "version": 2 },
    { "scanner": "semgrep", "severity": "info", "count": 2, "version": 4 }
]

我在挣扎,我已经到了不能忽视以前版本的地步。任何帮助都是非常感谢的。

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-17 00:31:59

与MongoDB v5.0+,

您可以使用$setWindowFields计算scanners分组的排名。然后,使用最高的级别(即秩= 1),您可以执行另一个$group并计数。

代码语言:javascript
复制
db.collection.aggregate([
  {
    "$setWindowFields": {
      "partitionBy": "$scanner",
      "sortBy": {
        "version": -1
      },
      "output": {
        "rank": {
          "$rank": {}
        }
      }
    }
  },
  {
    $match: {
      "rank": 1
    }
  },
  {
    $group: {
      _id: {
        "scanner": "$scanner",
        "severity": "$severity",
        "version": "$version"
      },
      count: {
        $sum: 1
      }
    }
  },
  {
    $project: {
      "_id": 0,
      "scanner": "$_id.scanner",
      "severity": "$_id.severity",
      "version": "$_id.version",
      "count": 1
    }
  }
])

这是供您参考的蒙戈游乐场

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72652984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档