MongoDB文档无__v属性时,Mongoose操作是否会自动添加该属性?
Mongoose对无
__v属性文档的处理行为 好问题!我之前在项目里也碰到过第三方服务直接操作MongoDB导致文档缺失__v的情况,刚好可以给你明确答案:
- 当你**首次通过Mongoose对一个没有
__v属性的文档执行任何操作(读取、更新、保存等)**时,Mongoose会自动为该文档添加__v: 0的属性,并且后续的版本变更会正常递增这个值。 - 举个实际场景:假设第三方写入了一条没有
__v的用户文档,你用UserModel.findById(userId)读取它,然后修改某个字段并调用save(),Mongoose在保存时就会自动给这条文档加上__v: 0;下次再通过Mongoose更新它,__v就会变成1,以此类推。 - 注意:如果你的Schema里显式设置了
versionKey: false(比如const UserSchema = new mongoose.Schema({...}, { versionKey: false })),那Mongoose就不会处理__v属性了,这种情况下才不会自动添加。但默认情况下,Mongoose的versionKey是开启的,值为__v。
简单来说,只要你没手动禁用版本键,Mongoose会自动补全缺失的__v属性,确保后续的版本跟踪能正常工作,不用额外手动处理第三方写入的文档。
内容的提问来源于stack exchange,提问作者Marc Borni
相关产品推荐
相关产品推荐

