在MongoDB中如何实现查询结果仅返回指定字段?
限制查询返回字段的实现方案
你当前的场景属于数据库查询的投影操作,不同使用场景下的实现方式如下:
1. MongoDB 原生查询
在find方法的第二个参数传入投影配置,指定要返回的字段设为1即可,_id默认会返回,不需要可手动设为0:
db.你的集合名.find({}, { name: 1, class: 1, _id: 0 })
2. Mongoose 查询
有三种常用实现方式:
- 写法1:和原生查询逻辑一致,在
find方法第二个参数传配置
你的模型名.find({}, { name: 1, class: 1, _id: 0 })
- 写法2:链式调用
select方法,可读性更高
// 字符串写法,前缀-表示排除该字段 你的模型名.find().select('name class -_id') // 对象写法,和原生规则一致 你的模型名.find().select({ name: 1, class: 1, _id: 0 })
- 写法3:全局限制该模型所有查询返回字段,定义Schema时配置
toJSON转换规则
const yourSchema = new mongoose.Schema({ name: String, class: String, title: String, createdBy: String, // 其他字段定义 }, { toJSON: { transform: (doc, ret) => { // 只保留需要的字段 return { name: ret.name, class: ret.class } } } })
补充规则:MongoDB投影仅支持同时指定「要包含的字段」或者「要排除的字段」,两类规则不能混用,只有
_id字段支持在包含规则中单独设置为排除。
内容的提问来源于stack exchange,提问作者Areeba Akhtar
相关产品推荐
相关产品推荐

