Estou usando a Mongoose
versão 3 com a MongoDB
versão 2.2. Percebi que um __v
campo começou a aparecer nos meus MongoDB
documentos. Tem algo a ver com versionamento? Como isso é usado?
Estou usando a Mongoose
versão 3 com a MongoDB
versão 2.2. Percebi que um __v
campo começou a aparecer nos meus MongoDB
documentos. Tem algo a ver com versionamento? Como isso é usado?
Respostas:
A partir daqui :
A
versionKey
é uma propriedade definida em cada documento quando o primeiro criado por Mongoose. Este valor de chaves contém a revisão interna do documento. O nome desta propriedade do documento é configurável. O padrão é__v
.Se isso entrar em conflito com seu aplicativo, você poderá configurar da seguinte maneira:
new Schema({..}, { versionKey: '_somethingElse' })
__v === 0
)?
query.select('-__v')
. @ExplosionPills você precisaria adicionar o middleware mangusto schema.pre('save', function (next) { this.increment(); next(); })
.
Bem, eu não consigo ver a solução do Tony ... então eu mesmo tenho que lidar com isso ...
Se você não precisa do version_key, pode:
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
});
Definir versionKey como false significa que o documento não está mais com versão.
Isso é problemático se o documento contiver uma matriz de subdocumentos. Um dos subdocumentos pode ser excluído, reduzindo o tamanho da matriz. Posteriormente, outra operação poderia acessar o subdocumento na matriz em sua posição original.
Como a matriz agora é menor, ela pode acessar acidentalmente o subdocumento errado na matriz.
O versionKey resolve isso associando o documento ao a versionKey, usado pelo mangusto internamente para garantir que ele acesse a versão de coleção correta.
Mais informações podem ser encontradas em: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html
resultFromMongo.toObject({ versionKey: false })
, para suprimir o valor.
schema.set('versionKey', false);
Podemos usar versionKey: false na definição do esquema
'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();
});
}
}