MongoDB aggregate配合populate查询时如何排除关联对象指定属性
Mongoose populate关联查询指定返回字段方案
调用populate()时通过select配置项即可控制关联路径返回的字段,直接修改代码即可实现仅返回name字段的需求:
const results = await Seller.aggregate(aggregatePipeline).exec(); const sellers = await Seller.populate(results, { path: "user", select: "name -_id" });
配置说明
select支持两种写法,效果完全一致:- 字符串写法:空格分隔字段,需要保留的字段直接写字段名,需要排除的字段前加
-前缀 - 对象写法:字段值为
1代表返回,为0代表排除,示例:select: { name: 1, _id: 0 }
- 字符串写法:空格分隔字段,需要保留的字段直接写字段名,需要排除的字段前加
- MongoDB默认会返回文档的
_id字段,如果你不需要关联user的_id,必须显式加-_id(字符串写法)或者_id:0(对象写法)排除,否则即使只指定了name,结果里也会带上_id。
如果你的需求是排除指定字段、保留其余所有字段,可以直接在select里写要排除的字段,比如排除email、address的写法:
const sellers = await Seller.populate(results, { path: "user", select: "-email -address" });
修改后返回的user结构就会符合预期,仅包含name字段:
... user: { name: "name" }
内容的提问来源于stack exchange,提问作者Recursive
相关产品推荐
相关产品推荐

