J'utilise la Mongoose
version 3 avec la MongoDB
version 2.2. J'ai remarqué qu'un __v
champ commençait à apparaître dans mes MongoDB
documents. Est-ce quelque chose à voir avec la gestion des versions? Comment est-ce utilisé?
J'utilise la Mongoose
version 3 avec la MongoDB
version 2.2. J'ai remarqué qu'un __v
champ commençait à apparaître dans mes MongoDB
documents. Est-ce quelque chose à voir avec la gestion des versions? Comment est-ce utilisé?
Réponses:
D' ici :
Le
versionKey
est une propriété située sur chaque document créé lors de la première par Mongoose. Cette valeur de clés contient la révision interne du document. Le nom de cette propriété de document est configurable. La valeur par défaut est__v
.Si cela entre en conflit avec votre application, vous pouvez configurer comme tel:
new Schema({..}, { versionKey: '_somethingElse' })
__v === 0
)?
query.select('-__v')
. @ExplosionPills, vous devez ajouter un middleware mangouste comme schema.pre('save', function (next) { this.increment(); next(); })
.
Eh bien, je ne vois pas la solution de Tony ... donc je dois la gérer moi-même ...
Si vous n'avez pas besoin de version_key, vous pouvez simplement:
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
});
La définition de versionKey sur false signifie que le document n'est plus versionné.
Cela pose problème si le document contient un tableau de sous-documents. Un des sous-documents a pu être supprimé, réduisant la taille du tableau. Plus tard, une autre opération pourrait accéder au sous-document dans le tableau à sa position d'origine.
Étant donné que le tableau est maintenant plus petit, il peut accidentellement accéder au mauvais sous-document du tableau.
La versionKey résout ce problème en associant le document à la versionKey, utilisée par la mangouste en interne pour s'assurer qu'il accède à la bonne version de la collection.
Plus d'informations peuvent être trouvées sur: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html
resultFromMongo.toObject({ versionKey: false })
, pour supprimer la valeur.
schema.set('versionKey', false);
Nous pouvons utiliser versionKey: false dans la définition de schéma
'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();
});
}
}