我正在使用Mongoose
版本3和MongoDB
2.2。我注意到一个__v
字段已经开始出现在我的MongoDB
文档中。与版本控制有关吗?如何使用?
如果您不希望在结果中使用它,请在返回的对象形式猫鼬上使用_doc
—
moein rahimi
我正在使用Mongoose
版本3和MongoDB
2.2。我注意到一个__v
字段已经开始出现在我的MongoDB
文档中。与版本控制有关吗?如何使用?
Answers:
从这里:
该
versionKey
是对每个文档设置时,首先由猫鼬创建一个属性。此键值包含文档的内部修订版。此文档属性的名称是可配置的。默认值为__v
。如果这与您的应用程序冲突,则可以这样配置:
new Schema({..}, { versionKey: '_somethingElse' })
__v === 0
)?
query.select('-__v')
。@ExplosionPills您需要添加猫鼬中间件,例如schema.pre('save', function (next) { this.increment(); next(); })
。
好吧,我看不到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通过将文档与一个versionKey相关联来解决此问题,供mongoose内部使用以确保其访问正确的集合版本。
有关更多信息,请访问:http : //aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html
resultFromMongo.toObject({ versionKey: false })
,以取消设定值。
schema.set('versionKey', false);
我们可以在模式定义中使用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();
});
}
}