Mongoose
版本3和MongoDB
版本2.2。我注意到__v
文档中已经开始出现MongoDB
字段。与版本控制有关吗?如何使用?#1 楼
从这里:versionKey
是Mongoose首次创建时在每个文档上设置的属性。此键值包含文档的内部修订版。此文档属性的名称是可配置的。
默认值为
__v
。如果这与您的应用程序冲突,则可以这样配置:
new Schema({..}, { versionKey: '_somethingElse' })
评论
使用此属性确定是否刚刚创建文档是否安全(例如__v === 0)?
–防爆药
13年8月28日在18:24
@爆炸药以备将来参考:否。仅在可能导致冲突,修改数组位置的操作之后,才增加版本密钥。其他更新不会增加它。原始发行帖子对此进行了详细说明:aaronheckmann.tumblr.com/post/48943525537/…
–里卡多·托马西(Ricardo Tomasi)
2013年9月12日19:04
有没有办法从查询返回的文档中隐藏它?
–迪斯尼
2013年12月14日20:41在
@diosney query.select('-__ v')。 @ExplosionPills,您需要添加猫鼬中间件,例如schema.pre('save',function(next){this.increment(); next();})。
– wprl
2013年12月20日19:02
@talentedmrjones @wprl正是我现在正在做的,但是我想要可以直接放在Schema中的内容,以便在所有查询中使用。
–迪斯尼
2014年3月24日11:52
#2 楼
好吧,我看不到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
});
将versionKey设置为false意味着不再对文档进行版本控制。
如果文档包含子文档数组,则存在问题。子文档之一可以删除,以减小数组的大小。稍后,另一项操作可以访问数组中位于其原始位置的子文档。
由于数组现在变小,可能会意外访问数组中的错误子文档。
versionKey通过将文档与一个由mongoose使用的versionKey关联来解决此问题。内部以确保它访问正确的集合版本。
有关更多信息,请参见:http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning。 html
评论
将其设置为false的结果是什么?
–xperator
2015年11月10日15:55
您也可以调用resultFromMongo.toObject({versionKey:false}),以取消显示该值。
– Leo Gerber
17年2月2日在20:08
@xperator结果在方案中没有__V字段:{“ _id”:{“ $ oid”:“ 5aa62e99f36d28237f1a41ad”},“ email”:“ scott@gmail.com”,“ sessions”:0} vs {“ _id “:{” $ oid“:” 5aa62e99f36d28237f1a41ad“},”电子邮件“:” scott@gmail.com“,”会话“:0,” __v“:0}
–荡
18-3-12在7:42
或这个schema.set('versionKey',false);
– Stan Wiechers
20-4-6在17:47
设置为false后会有什么结果?除了不在文档中?
–有人特别
20 May 25 '11:54
#3 楼
我们可以在模式定义中使用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();
});
}
}
#4 楼
它是版本密钥,每当进行新更新时都会更新。我个人不喜欢禁用它。如果您想了解更多信息,请阅读此解决方案
[1]:猫鼬版本控制:何时安全禁用它?
评论
如果您不想在结果中使用它,请在返回的对象形式mongoose上使用_doc