Mongoose中的"__v"字段是什么

Sim*_*max 278 mongoose mongodb node.js

我正在使用2.2 Mongoose版本的版本3 MongoDB.我注意到一个__v字段已经开始出现在我的MongoDB文档中.它与版本控制有关吗?怎么用?

Ton*_*ion 277

这里:

versionKey是Mongoose首次创建时在每个文档上设置的属性.此键值包含文档的内部修订版.此文档属性的名称是可配置的.默认是__v.

如果这与您的应用程序冲突,您可以这样配置:

new Schema({..}, { versionKey: '_somethingElse' })
Run Code Online (Sandbox Code Playgroud)

  • @ExplosionPills供将来参考:没有.版本密钥仅在可能导致冲突的操作之后递增,修改阵列位置.其他更新不会增加它.原始发布的帖子详细解释了它:http://aaronheckmann.tumblr.com/post/48943525537/mongoose-v3-part-1-versioning (30认同)
  • 使用此属性来确定文档是否刚刚创建(例如`__v === 0`)是否安全? (14认同)
  • @diosney`query.select('-__ v')`.@ExplosionPills你需要添加像`schema.pre('save',function(next){this.increment(); next();})`这样的mongoose中间件. (5认同)
  • **@talentedmrjones****@ wprl**这正是我现在正在做的事情,但我想要一些我可以直接放入Schema中的所有**查询. (3认同)
  • 有没有办法从查询中返回的文档中隐藏它? (2认同)

ken*_*ley 62

好吧,我看不到托尼的解决方案......所以我必须自己处理...


如果您不需要version_key,您可以:

var UserSchema = new mongoose.Schema({
    nickname: String,
    reg_time: {type: Date, default: Date.now}
}, {
    versionKey: false // You should be aware of the outcome after set to false
});
Run Code Online (Sandbox Code Playgroud)

  • 设置为假的结果是什么? (26认同)
  • @xperator见这里→http://mongoosejs.com/docs/guide.html#versionKey (9认同)
  • 设置为 false 后会出现什么结果?除了不在文档中之外? (3认同)
  • 您也可以调用`resultFromMongo.toObject({versionKey:false})`,以抑制该值。 (2认同)
  • @dang不,将versionKey设置为false的结果是,如果您不知道自己在做什么,最终可能会遇到并发问题。如果您打算禁用versionKey和/或实现自己的版本控制系统,则应认真考虑阅读以下链接:http://aaronheckmann.tumblr.com/post/48943525537/mongoose-v3-part-1-versioning。 (2认同)

Lys*_*sak 7

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

@Schema({ versionKey: false })
Run Code Online (Sandbox Code Playgroud)


小智 5

如果不需要,可以禁用版本密钥。

看这个例子:

var User = new mongoose.Schema({
   FullName:{
       type :String,
      
   },
   BirthDay:{
       type :String,
       
   },
   Address:{
       type :String,
   },
   Gender:{
       type:String,
   },
   PhoneNumber:{
       type:Number,
       ref:'Account'
   },
   AccountID:{
        type: Schema.Types.ObjectId,
        ref: 'Account'
   },
   UserName:{
       type:String,
       ref:'Account'
   }
},{collection:'User',
   versionKey: false //here
});
Run Code Online (Sandbox Code Playgroud)