【问题标题】:Getting the name of the field with maximum count in mongodb获取mongodb中最大计数的字段名称
【发布时间】:2017-04-19 21:13:18
【问题描述】:

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

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

【问题讨论】:

  • 计数在哪里?
  • 没有计数我想执行一个查询,比如从 max(count) 的车辆中选择备件类型
  • 还是不知道你在问什么。
  • db.AutoSmart.count({"Vehicle__SparePart__Type":"Wheel"}) 当我运行这个时,我得到了车轮的出现次数!我想检索出现次数最多的备件类型

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

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

$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 } 
])

【讨论】:

  • 如果我想得到最小的,我该如何改变它?
  • 要获得最小值,只需将$sort 管道更改为{ "$sort": { "count": 1 } }
【解决方案2】:

假设我们想从 DB 中获取用户的最大年龄。

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

您可以进一步检查document

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 2022-01-03
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    相关资源
    最近更新 更多