我使用Mongoose版本3和MongoDB版本2.2。我注意到一个__v字段已经开始出现在我的MongoDB文档。这与版本控制有关吗?它是如何使用的?
当前回答
“文档”中的“__v”字段服务于“optimisticConcurrency”关注点。
这个术语在猫鼬中基本上是指: 让,你通过'findOne, findById'抓取了一个文档,但没有使用mongoose的save()方法。如果在这个时间间隔内,任何其他代码在第一个文档实例之前抓取相同的文档并使用.save()方法,会怎样呢? 在这个用例中,如果我们想(特定于猫鼬)抛出一个版本错误之类的东西,我们在schema中使用optimisticConcurrency: true选项。
然后mongoose将使用'__v1'来比较这两个文档。
没有optimisticConcurrency: true选项。“__v”没有没有效果。猫鼬不会增加1。
注意:在'findOneAndUpdate'类操作中,不会更新'__v'。(只有save()更新)
其他回答
我们可以在模式定义中使用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();
});
}
}
如果您不需要版本键,可以禁用它。
请看这个例子:
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
});
从这里开始:
versionKey是第一次创建时在每个文档上设置的属性 猫鼬。属性的内部修订 文档。此文档属性的名称是可配置的。的 默认值是__v。 如果这与你的应用程序冲突,你可以这样配置:
new Schema({..}, { versionKey: '_somethingElse' })
“文档”中的“__v”字段服务于“optimisticConcurrency”关注点。
这个术语在猫鼬中基本上是指: 让,你通过'findOne, findById'抓取了一个文档,但没有使用mongoose的save()方法。如果在这个时间间隔内,任何其他代码在第一个文档实例之前抓取相同的文档并使用.save()方法,会怎样呢? 在这个用例中,如果我们想(特定于猫鼬)抛出一个版本错误之类的东西,我们在schema中使用optimisticConcurrency: true选项。
然后mongoose将使用'__v1'来比较这两个文档。
没有optimisticConcurrency: true选项。“__v”没有没有效果。猫鼬不会增加1。
注意:在'findOneAndUpdate'类操作中,不会更新'__v'。(只有save()更新)
它是版本键。每当有新的更新时,它就会更新。我个人不喜欢禁用它。
如果你想了解更多,请阅读这个解决方案 [1]:猫鼬版本:什么时候关闭它是安全的?
推荐文章
- 为什么在节点REPL中没有定义__dirname ?
- 在Node.js中克隆对象
- Node.js中的process.env.PORT是什么?
- js的Mongoose.js字符串到ObjectId函数
- ELIFECYCLE Node.js错误是什么意思?
- mongodb中使用ISODate的日期查询似乎无法正常工作
- 如何更新文档数组中的对象(嵌套更新)
- 如何完全卸载Ubuntu中的nodejs, npm和node
- 在猫鼬模式中添加created_at和updated_at字段
- 我如何把变量javascript字符串?
- 如何强制tsc忽略node_modules文件夹?
- NPM全局安装“无法找到模块”
- 如何更新mongodb中的多个数组元素
- MongoDB和Mongoose的区别
- 如何使用Express.js指定HTTP错误码?