乐闻世界logo
搜索文章和话题

Mongoose 中的 __v 字段的作用是什么?

2个答案

1
2

Mongoose 中的 __v 字段是一个隐藏字段,它代表了文档的版本号。这个字段由 Mongoose 在内部使用,主要目的是为了支持文档的版本控制,使用乐观锁定机制来避免并发修改时的冲突。

每当在 Mongoose 中创建或保存文档时,如果该文档包含数组字段,并且执行了会修改数组的操作(例如,添加或删除元素),Mongoose 会自动更新这个 __v 字段的值。这样,当多个用户或进程同时尝试修改同一文档时,Mongoose 可以通过检查 __v 字段的值来确定文档是否已经被其他方修改过,从而决定是否允许当前的修改操作继续执行。

这个版本号是自动维护的,开发者通常不需要手动修改它。当然,如果不需要这个字段,也可以在定义 Mongoose Schema 时通过选项 { versionKey: false } 禁用它。

例如,如果我们定义一个简单的用户模型,并希望禁用 __v 字段,我们可以这样做:

javascript
const 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);

但在大多数情况下,开发者都保留这个字段,以便可以利用其提供的并发修改控制的功能。

2024年6月29日 12:07 回复

要在 NestJS 中删除,需要向Schema()装饰器添加选项

shell
@Schema({ versionKey: false })
2024年6月29日 12:07 回复

你的答案