首页 文章

获取mongodb中具有最大计数的字段的名称

提问于
浏览
3

我是mongodb的新手,想要获得具有最大数量的字段(备件类型)的名称!我的集合中的示例文档(原始集合有50个文档)如下所示

[
  {
    "Vehicle": {
      "licensePlateNo": "111A",
      "vehicletype": "Car",
      "model": "Nissan Sunny",
      "VehicleCategory": [
        {
          "name": "Passenger"
        }
      ],
      "SparePart": [
        {
          "sparePartID": 4,
          "Type": "Wheel",
          "Price": 10000,
          "Supplier": [
            {
              "supplierNo": 10,
              "name": "Saman",
              "contactNo": 112412634
            }
          ]
        }
      ],
      "Employee": [
        {
          "employeeNo": 3,
          "job": "Painter",
          "jobCategory": "",
          "salary": 100000
        }
      ]
    }
  }
]

如何编写查询以获取具有最高计数的备件的名称?

1 回答

  • 2

    将聚合框架用于此类查询 . 特别是,您需要运行聚合操作,其中管道包含以下阶段(按顺序):

    $unwind - 您需要将此作为第一个管道步骤,以便展平 SparePart 数组,以便您可以在管道中进一步处理文档 . 如果没有这个,您将无法获得所需的结果,因为数据将采用数组格式,前一阶段中的累加器运算符将处理单个文档以聚合计数 .

    $group - 对于按类型字段分组的文档,此步骤将计算您的计数 . 累加器运算符 $sum 将返回每个组的文档总数 .

    $sort - 当您从前一个 $group 管道获得结果时,您需要按计数字段对文档进行排序,以便获得计数最多的顶级文档 .

    $limit - 这将为您提供最高级的文件 .

    现在,将上面的内容组合在一起,你应该运行以下管道来获得所需的结果:

    db.AutoSmart.aggregate([
        { "$unwind": "$Vehicle.SparePart" },
        {
            "$group": {
                "_id": "$Vehicle.SparePart.Type",
                "count": { "$sum": 1 }
            }
        },
        { "$sort": { "count": -1 } },
        { "$limit": 1 } 
    ])
    

相关问题