J'utilise la Mongooseversion 3 avec la MongoDBversion 2.2. J'ai remarqué qu'un __vchamp commençait à apparaître dans mes MongoDBdocuments. Est-ce quelque chose à voir avec la gestion des versions? Comment est-ce utilisé?
Le versionKeyest 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:
Est-il sûr d'utiliser cette propriété pour déterminer si un document vient d'être créé (par exemple __v === 0)?
Pilules d'explosion
39
@ExplosionPills pour référence future: non. La clé de version n'est incrémentée qu'après des opérations susceptibles de provoquer un conflit, modifiant les positions du tableau. Les autres mises à jour ne l'incrémenteront pas. Le post de sortie original l'explique en détail: aaronheckmann.tumblr.com/post/48943525537/…
Ricardo Tomasi
2
Existe-t-il un moyen de le cacher des documents retournés des requêtes?
diosney
6
@diosney query.select('-__v'). @ExplosionPills, vous devez ajouter un middleware mangouste comme schema.pre('save', function (next) { this.increment(); next(); }).
wprl
3
@talentedmrjones @wprl C'est exactement ce que je fais maintenant, mais je voulais quelque chose que je pourrais mettre directement dans le schéma, donc dans toutes les requêtes.
diosney
73
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:
varUserSchema=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.
Vous pouvez également appeler resultFromMongo.toObject({ versionKey: false }), pour supprimer la valeur.
Leo Gerber
@xperator le résultat n'est pas un champ __V dans le schéma: {"_id": {"$ oid": "5aa62e99f36d28237f1a41ad"}, "email": "[email protected]", "sessions": 0} vs {"_id ": {" $ oid ":" 5aa62e99f36d28237f1a41ad "}," email ":" [email protected] "," sessions ": 0," __v ": 0}
dang
ou cecischema.set('versionKey', false);
Stan Wiechers
1
quel est le résultat après avoir réglé sur faux? à part qu'il ne figure pas dans le document?
Quelqu'un de spécial
0
Nous pouvons utiliser versionKey: false dans la définition de schéma
'use strict';const mongoose = require('mongoose');exportclassAccount 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();});}}
Réponses:
D' ici :
la source
__v === 0
)?query.select('-__v')
. @ExplosionPills, vous devez ajouter un middleware mangouste commeschema.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:
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
la source
resultFromMongo.toObject({ versionKey: false })
, pour supprimer la valeur.schema.set('versionKey', false);
Nous pouvons utiliser versionKey: false dans la définition de schéma
la source