5月29日 01:07

Mongoose 是什么,为什么要用它而不是原生 MongoDB 驱动?

Mongoose 是 MongoDB 的 ODM(对象文档建模)库,在 Node.js 和 MongoDB 之间提供结构化抽象层。核心价值:通过 Schema 强制文档结构、内置数据验证、支持中间件钩子(pre/post)、自动类型转换和虚拟字段,让开发者以面向对象方式操作 MongoDB,显著降低数据不一致风险。

追问

Mongoose 的 Schema 和 Model 是什么关系? Schema 定义文档结构(字段类型、默认值、验证规则),Model 是 Schema 的编译产物,即操作数据库的构造函数。一个 Schema 可编译出多个 Model。

pre 和 post 中间件分别适合做什么? pre 常用于密码加密(save 前 hash)、数据格式化、权限校验;post 常用于日志记录、缓存清理、触发异步通知。pre 可通过 next()async/await 控制流程中断。

Mongoose 的类型转换(casting)会带来什么隐患? 查询时 Mongoose 自动将字符串 "123" 转为数字 123,可能掩盖数据错误。生产环境建议配合严格验证,或使用 strictQuery 选项控制行为。

虚拟字段和真实字段有什么区别? 虚拟字段不存入数据库,由 get/set 计算得出,无法用于查询和排序。适合组合展示(如 fullName = firstName + lastName),不适合业务筛选。

写段代码

js
const userSchema = new mongoose.Schema({ name: { type: String, required: true, trim: true }, email: { type: String, required: true, lowercase: true }, age: { type: Number, min: 0, default: 0 } }); userSchema.virtual('info').get(() => `${this.name}, ${this.age}`); const User = mongoose.model('User', userSchema);
标签:Mongoose