Mongoose使用select('-_id -__v -__t')无法移除__t字段咨询
关于Mongoose select无法移除__t字段的问题
你没写错代码,但__t是Mongoose鉴别器(Discriminator)的类型标识字段,默认不受select方法的排除规则约束——因为鉴别器模型需要靠这个字段区分不同的子类实例,所以Mongoose会强制保留它,哪怕你在select里写了排除。
解决办法有两个:
- 全局默认排除:在定义基础Schema的时候,直接把__t字段的
select选项设为false:
const baseSchema = new mongoose.Schema( { /* 你的字段定义 */ }, { discriminatorKey: '__t' } ); // 单独设置__t字段默认不返回 baseSchema.path('__t').select(false);
这样后续所有基于这个Schema的查询,默认都不会返回__t字段。
- 临时查询排除:如果只是个别查询需要排除,在查询链里加上
.lean()方法,因为lean模式会返回普通JS对象,绕过Mongoose的文档包装逻辑,这时候select的排除规则就能正常生效:
// 示例查询 YourModel.find() .select('-_id -__v -__t') .lean() .exec();
内容的提问来源于stack exchange,提问作者jaget
相关产品推荐
相关产品推荐

