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

获取mongodb中具有最大计数的字段的名称,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我是mongodb的新手,希望获得具有最大计数的字段(备件类型)的名称!我的收藏中的一个样本文档(原始收藏有50个文档)如下所示 [ { "Vehicle": { "licensePlateNo": "111A", "vehicletype": "Car", "model": "Nissan Sunny", "VehicleCategory": [ { "name": "Passenger"

我是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
        }
      ]
    }
  }
]

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

使用聚合框架进行此类查询。特别是,您需要运行聚合操作,其中管道由以下阶段(按顺序)组成:

-您需要将此作为第一个管道步骤,以便展平
SparePart
数组,以便您可以在管道中进一步处理非规范化的文档。没有这个,你就得不到 由于数据将采用数组格式,且前一阶段中的累加器运算符将处理单个文档以聚合计数,因此得到所需的结果

-此步骤将为您计算按类型字段分组的文档的计数。累加器操作符将返回每组的文档总数

-当您从上一个管道中获得结果时,您需要按计数字段对文档进行排序,以便获得计数最多的顶部文档

-这将为您提供顶级文档

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

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

假设我们想从数据库中获取用户的最大年龄

db.collection.find().sort({age:-1}).limit(1) // for MAX  

进一步您可以检查。

计数在哪里?没有计数我想执行一个查询,如从车辆中选择sparepart类型,其中max(计数)仍然不知道您在问什么。db.AutoSmart.count({“vehicle\uu sparepart\uuuuuuuu type”:“Wheel”})当我运行此命令时,我会得到车轮的出现次数!我想检索出现次数最多的备件类型如果我想获取最小的备件类型,我如何更改它?要获取最小的备件类型,只需将
$sort
管道更改为
{“$sort”:{“count”:1}