Estoy usando la Mongoose
versión 3 con la MongoDB
versión 2.2. He notado que un __v
campo ha comenzado a aparecer en mis MongoDB
documentos. ¿Tiene algo que ver con el control de versiones? ¿Cómo se usa?
Estoy usando la Mongoose
versión 3 con la MongoDB
versión 2.2. He notado que un __v
campo ha comenzado a aparecer en mis MongoDB
documentos. ¿Tiene algo que ver con el control de versiones? ¿Cómo se usa?
Respuestas:
Desde aquí :
El
versionKey
es una propiedad establecida en cada documento cuando Mongoose la creó por primera vez. Este valor de clave contiene la revisión interna del documento. El nombre de esta propiedad de documento es configurable. El valor por defecto es__v
.Si esto entra en conflicto con su aplicación, puede configurarlo como tal:
new Schema({..}, { versionKey: '_somethingElse' })
__v === 0
)?
query.select('-__v')
. @ExplosionPills necesitaría agregar middleware de mangosta como schema.pre('save', function (next) { this.increment(); next(); })
.
Bueno, no puedo ver la solución de Tony ... así que tengo que manejarlo yo mismo ...
Si no necesita version_key, puede simplemente:
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
});
Establecer versionKey en false significa que el documento ya no está versionado.
Esto es problemático si el documento contiene una matriz de subdocumentos. Uno de los subdocumentos podría eliminarse, reduciendo el tamaño de la matriz. Más tarde, otra operación podría acceder al subdocumento en la matriz en su posición original.
Como la matriz ahora es más pequeña, puede acceder accidentalmente al subdocumento incorrecto en la matriz.
VersionKey resuelve esto asociando el documento con una versionKey, utilizada internamente por la mangosta para asegurarse de que accede a la versión correcta de la colección.
Se puede encontrar más información en: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html
resultFromMongo.toObject({ versionKey: false })
para sobreprimir el valor.
schema.set('versionKey', false);
Podemos usar versionKey: false en la definición de 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();
});
}
}