如何查询含多条vehicleName记录的employeeId?是否需聚合?
解决方案
要找出拥有多条含vehicleName字段记录的employeeId,普通的find查询无法实现,必须使用MongoDB的聚合操作——因为需求核心是分组统计符合条件的记录数量,这是普通查询做不到的。
聚合查询代码
db.collection.aggregate([ // 筛选出所有包含vehicleName字段的文档 { $match: { vehicleName: { $exists: true } } }, // 按employeeId分组,统计每组的记录数 { $group: { _id: "$employeeId", vehicleCount: { $sum: 1 } } }, // 过滤出记录数≥2的分组 { $match: { vehicleCount: { $gte: 2 } } }, // 调整输出格式,只返回employeeId(可选) { $project: { _id: 0, employeeId: "$_id" } } ])
各阶段说明
- 第一阶段$match:先排除不包含
vehicleName的文档(比如employeeId:2的摩托车记录),只保留有效数据。 - $group:按
employeeId对筛选后的文档分组,用$sum:1统计每个员工对应的vehicleName记录数量。 - 第二阶段$match:只保留统计数量≥2的分组,也就是符合需求的员工ID。
- $project:将分组的
_id(即employeeId)重命名为employeeId,并去掉默认的_id字段,让输出更直观。
执行后会返回预期结果:
[ { "employeeId": 1 }, { "employeeId": 3 } ]
内容的提问来源于stack exchange,提问作者logo_positive
相关产品推荐
相关产品推荐

