You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:22:33