使用group-by的Mongodb聚合查询

卡皮尔·坎德尔瓦尔

我的MongoDB存储具有以下结构的文档:

{
    "curl_detail" : {
        "Curl1" : {
            "attack_type" : "attack1",          
            "flag" : "Attack",
            "curl_result" : "Pass"
        },
        "Curl2" : {
            "attack_type" : "attack1",
            "flag" : "Attack",
            "curl_result" : "Pass"
        },
        "Curl3" : {
            "attack_type" : "attack2",
            "flag" : "Attack",
            "curl_result" : "Pass"
        },
        "Curl4" : {
            "attack_type" : "attack3",
            "flag" : "Attack",
            "curl_result" : "Fail"
        }
}
{
    "curl_detail" : {
        "Curl1" : {
            "attack_type" : "attack3",
            "flag" : "Attack",
            "curl_result" : "Pass"
        },
        "Curl2" : {
            "attack_type" : "attack2",
            "flag" : "Attack",
            "curl_result" : "Pass"
        },
        "Curl3" : {
            "attack_type" : "attack3",
            "flag" : "Pass",
            "curl_result" : "Pass"
        },
        "Curl4" : {
            "attack_type" : "attack1",
            "flag" : "Attack",
            "curl_result" : "Fail"
        }
}

如何执行MongoDB聚合以实现以下输出:

[{
    attack: "attack1",
    expected: 3,
    actual: 2
},
{
    attack:"attack2",
    expected: 2,
    actual: 2
},
{
    attack: "attack3",
    expected: 2,
    actual: 2
}]

所需输出的说明:

  1. 我需要按curl_detail中存在的每个curl对应Attack_type字段进行分组
  2. 现在预期在输出字段的总和“标志”具有价值的关键是“攻击”(注:“通过”值中不包含的总和。看到预期值,攻击38,输出更多的澄清)
  3. 并且输出中实际字段是值为“ Pass”“ curl_result”的总和(请注意,“失败”值不包括在总和中)
  4. 为输出的期望值计算的总和仅取决于“ flag”键,而为输出的实际计算的总和仅取决于“ curl_result”键。
阿什

您可以使用以下汇总

db.collection.aggregate([
  { "$addFields": {
    "curl_detail": {
      "$objectToArray": "$curl_detail"
    }
  }},
  { "$unwind": "$curl_detail" },
  { "$group": {
    "_id": "$curl_detail.v.attack_type",
    "expected": {
      "$sum": {
        "$cond": [
          { "$eq": ["$curl_detail.v.flag", "Attack"] },
          1,
          0
        ]
      }
    },
    "actual": {
      "$sum": {
        "$cond": [
          { "$eq": ["$curl_detail.v.curl_result", "Pass"] },
          1,
          0
        ]
      }
    }
  }},
  { "$addFields": { "attack": "$_id", "_id": "$$REMOVE" }}
])

蒙哥运动场

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Mongodb聚合框架:$ group是否使用索引?

来自分类Dev

MongoDB:尽管仅使用索引字段,但不涵盖聚合查询

来自分类Dev

如何使用mongodb对$ group聚合输出进行排序

来自分类Dev

MongoDB:聚合框架$ group,使用C#保留ObjectdID

来自分类Dev

如何在单个mongodb查询中使用求和,乘法,除法和分组聚合

来自分类Dev

mongodb聚合查询在使用$ sum时未返回正确的总和

来自分类Dev

使用MongoDB聚合查询匹配集合中的特定项目

来自分类Dev

如何使用MongoDB聚合

来自分类Dev

mongodb与$ group和$ lookup聚合

来自分类Dev

使用聚合查询删除mongodb中的重复项

来自分类Dev

使用关联集合字段进行查找和排序的MongoDB聚合正在减慢查询速度

来自分类Dev

使用Node JS在MongoDb中聚合查询

来自分类Dev

MongoDB聚合:在$ match $或查询中使用当前文档的字段值

来自分类Dev

使用带有$ lookup和$ match的聚合的搜索查询mongodb

来自分类Dev

在Mongodb中使用聚合,查找和管道进行查询

来自分类Dev

使用聚合MongoDB

来自分类Dev

MongoDB如何使用聚合代替以下查询

来自分类Dev

在MongoDB聚合查询中使用以$开头的字段

来自分类Dev

MongoDB:尽管仅使用索引字段,但不涵盖聚合查询

来自分类Dev

如何使用mongodb对$ group聚合输出进行排序

来自分类Dev

mongodb聚合$ group $ sort

来自分类Dev

在带有$ or的MongoDB聚合查询中使用数组

来自分类Dev

在Meteorjs服务器端函数中使用MongoDB聚合查询

来自分类Dev

聚合查询中的Mongodb Java驱动程序使用限制

来自分类Dev

是否可以使用日期匹配的MongoDB聚合查询?

来自分类Dev

使用聚合函数的MongoDB嵌套查询

来自分类Dev

使用Spring数据mongodb在MongoTempate中进行聚合查询的执行计划

来自分类Dev

如何在mongodb中为group by使用聚合

来自分类Dev

使用 spring 的 MongoDB 聚合查询

Related 相关文章

  1. 1

    Mongodb聚合框架:$ group是否使用索引?

  2. 2

    MongoDB:尽管仅使用索引字段,但不涵盖聚合查询

  3. 3

    如何使用mongodb对$ group聚合输出进行排序

  4. 4

    MongoDB:聚合框架$ group,使用C#保留ObjectdID

  5. 5

    如何在单个mongodb查询中使用求和,乘法,除法和分组聚合

  6. 6

    mongodb聚合查询在使用$ sum时未返回正确的总和

  7. 7

    使用MongoDB聚合查询匹配集合中的特定项目

  8. 8

    如何使用MongoDB聚合

  9. 9

    mongodb与$ group和$ lookup聚合

  10. 10

    使用聚合查询删除mongodb中的重复项

  11. 11

    使用关联集合字段进行查找和排序的MongoDB聚合正在减慢查询速度

  12. 12

    使用Node JS在MongoDb中聚合查询

  13. 13

    MongoDB聚合:在$ match $或查询中使用当前文档的字段值

  14. 14

    使用带有$ lookup和$ match的聚合的搜索查询mongodb

  15. 15

    在Mongodb中使用聚合,查找和管道进行查询

  16. 16

    使用聚合MongoDB

  17. 17

    MongoDB如何使用聚合代替以下查询

  18. 18

    在MongoDB聚合查询中使用以$开头的字段

  19. 19

    MongoDB:尽管仅使用索引字段,但不涵盖聚合查询

  20. 20

    如何使用mongodb对$ group聚合输出进行排序

  21. 21

    mongodb聚合$ group $ sort

  22. 22

    在带有$ or的MongoDB聚合查询中使用数组

  23. 23

    在Meteorjs服务器端函数中使用MongoDB聚合查询

  24. 24

    聚合查询中的Mongodb Java驱动程序使用限制

  25. 25

    是否可以使用日期匹配的MongoDB聚合查询?

  26. 26

    使用聚合函数的MongoDB嵌套查询

  27. 27

    使用Spring数据mongodb在MongoTempate中进行聚合查询的执行计划

  28. 28

    如何在mongodb中为group by使用聚合

  29. 29

    使用 spring 的 MongoDB 聚合查询

热门标签

归档