MongoDB聚合结果输出修改:高收入标识查询求助
解决MongoDB生成highEarner字段的查询问题
嘿,我来帮你排查下这个查询的问题,你的思路是对的,但语法和操作符的使用上有几个误区:
你的当前语句存在的问题:
- 拼写错误:
aggregrate应该是aggregate(少了一个e) - 错误使用
$group:$group是用来对文档分组聚合的(比如求和、计数),但你需要的是对每个文档单独计算highEarner字段,完全不需要分组 - 语法格式错误:条件判断的写法不符合MongoDB的规则,正确的字段比较和条件分支需要用
$cond操作符,而且你写的{$income:$gt 70000}这种格式完全不合法
正确的查询方案
根据你的需求,我们可以用$project或者$addFields来实现,两种场景分别对应:
场景1:只返回name和highEarner字段
用$project直接构造输出结构:
db.collection.aggregate([ { $project: { _id: 0, // 可选:如果不需要默认返回的_id字段就设为0 name: 1, highEarner: { $cond: { if: { $gt: ["$income", 70000] }, // 判断income是否大于70000 then: true, else: false } } } } ])
场景2:保留原文档其他字段(比如position)同时添加highEarner
用$addFields先添加新字段,再用$project过滤需要的字段(如果需要的话):
db.collection.aggregate([ { $addFields: { highEarner: { $cond: { if: { $gt: ["$income", 70000] }, then: true, else: false } } } }, // 可选:如果只需要name和highEarner,添加这一步过滤字段 { $project: { _id: 0, name: 1, highEarner: 1 } } ])
输出效果
执行后会得到你期望的结果:
{"name": "John Doe", "highEarner": true}, {"name": "John Loe", "highEarner": false}
内容的提问来源于stack exchange,提问作者Peadar08
相关产品推荐
相关产品推荐

