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),不适合业务筛选。
写段代码
jsconst 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);