首页 > 解决方案 > MongoDB 查询优化 - 回顾

问题描述

再会 !

我有以下集合

[
  {
    "packageName": "pack1",
    "className": "class1",
    "status": "passed"
  },
  {
    "packageName": "pack1",
    "className": "class1",
    "status": "ignored"
  },
  {
    "packageName": "pack1",
    "className": "class2",
    "status": "failed"
  },
  {
    "packageName": "pack2",
    "className": "class1",
    "status": "passed"
  },
  {
    "packageName": "pack2",
    "className": "class1",
    "status": "passed"
  },
  
]

为了按包分组,然后计算通过/失败/忽略计数并计算类计数,我创建了以下查询

db.collection.aggregate([
  {
    "$group": {
      "_id": "$packageName",
      "classes": {
        "$addToSet": "$className"
      },
      "passCount": {
        "$sum": {
          "$cond": [
            {
              "$eq": [
                "$status",
                "passed"
              ]
            },
            1,
            0
          ]
        }
      },
      "failCount": {
        "$sum": {
          "$cond": [
            {
              "$eq": [
                "$status",
                "failed"
              ]
            },
            1,
            0
          ]
        }
      },
      "ignoredCount": {
        "$sum": {
          "$cond": [
            {
              "$eq": [
                "$status",
                "ignored"
              ]
            },
            1,
            0
          ]
        }
      },
      
    }
  },
  {
    "$project": {
      "packageName": "$_id",
      "classCount": {
        "$size": "$classes"
      },
      "passCount": 1,
      "failCount": 1,
      "ignoredCount": 1
    }
  }
])

得到以下输出

[
  {
    "_id": "pack1",
    "classCount": 2,
    "failCount": 1,
    "ignoredCount": 1,
    "packageName": "pack1",
    "passCount": 1
  },
  {
    "_id": "pack2",
    "classCount": 1,
    "failCount": 0,
    "ignoredCount": 0,
    "packageName": "pack2",
    "passCount": 2
  }
]

作为 MongoDB 的初学者,我不确定它是否经过优化。我一直在阅读文档,这就是我想出的。如果您能帮助我优化此查询并提供您的评论,我们将不胜感激。

谢谢你的时间 !

标签: mongodbmongodb-query

解决方案


推荐阅读