Mongoose中的“__v”字段是什么

时间:2012-09-19 13:35:19

标签: node.js mongodb mongoose

我正在使用Mongoose版本3和MongoDB版本2.2。我注意到我的__v文档中已经开始显示MongoDB字段。它与版本控制有关吗?它是如何使用的?

7 个答案:

答案 0 :(得分:255)

来自here

  

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

     

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

new Schema({..}, { versionKey: '_somethingElse' })

答案 1 :(得分:57)

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

如果您不需要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
});

答案 2 :(得分:4)

为了在 NestJS 中移除需要给 Shema() 装饰器添加选项

@Schema({ versionKey: false })

答案 3 :(得分:3)

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

看这个例子:

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
});

答案 4 :(得分:0)

我们可以在架构定义中使用 versionKey:false

'use strict';

const mongoose = require('mongoose');

export class Account extends mongoose.Schema {

    constructor(manager) {

        var trans = {
            tran_date: Date,
            particulars: String,
            debit: Number,
            credit: Number,
            balance: Number
        }

        super({
            account_number: Number,
            account_name: String,
            ifsc_code: String,
            password: String,
            currency: String,
            balance: Number,
            beneficiaries: Array,
            transaction: [trans]
        }, {
            versionKey: false // set to false then it wont create in mongodb
        });

        this.pre('remove', function(next) {
            manager
                .getModel(BENEFICIARY_MODEL)
                .remove({
                    _id: {
                        $in: this.beneficiaries
                    }
                })
                .exec();
            next();
        });
    }

}

答案 5 :(得分:0)

这是版本密钥。只要进行新的更新,它就会更新。我个人不喜欢禁用它。

如果您想了解更多信息,请阅读此解决方案 [1]:Mongoose versioning: when is it safe to disable it?

答案 6 :(得分:-2)

如果您通过 HTML 表单保存数据,则必须将架构键的名称设置为与您的 html 标签名称相同。