Mongoose 中的 __v
字段是一个隐藏字段,它代表了文档的版本号。这个字段由 Mongoose 在内部使用,主要目的是为了支持文档的版本控制,使用乐观锁定机制来避免并发修改时的冲突。
每当在 Mongoose 中创建或保存文档时,如果该文档包含数组字段,并且执行了会修改数组的操作(例如,添加或删除元素),Mongoose 会自动更新这个 __v
字段的值。这样,当多个用户或进程同时尝试修改同一文档时,Mongoose 可以通过检查 __v
字段的值来确定文档是否已经被其他方修改过,从而决定是否允许当前的修改操作继续执行。
这个版本号是自动维护的,开发者通常不需要手动修改它。当然,如果不需要这个字段,也可以在定义 Mongoose Schema 时通过选项 { versionKey: false }
禁用它。
例如,如果我们定义一个简单的用户模型,并希望禁用 __v
字段,我们可以这样做:
javascriptconst mongoose = require('mongoose'); const Schema = mongoose.Schema; const userSchema = new Schema({ name: String, email: String, password: String }, { versionKey: false }); // 禁用 __v 字段 const User = mongoose.model('User', userSchema);
但在大多数情况下,开发者都保留这个字段,以便可以利用其提供的并发修改控制的功能。