获取mongodb中最大计数的字段名称
Posted
技术标签:
【中文标题】获取mongodb中最大计数的字段名称【英文标题】:Getting the name of the field with maximum count in 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") 当我运行这个时,我得到了车轮的出现次数!我想检索出现次数最多的备件类型 【参考方案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。
【讨论】:
以上是关于获取mongodb中最大计数的字段名称的主要内容,如果未能解决你的问题,请参考以下文章