Ich verwende MongooseVersion 3 mit MongoDBVersion 2.2. Ich habe festgestellt __v, dass in meinen MongoDBDokumenten ein Feld angezeigt wird . Hat das etwas mit Versionierung zu tun? Wie wird es benutzt?
Dies versionKeyist eine Eigenschaft, die für jedes Dokument festgelegt wurde, wenn es zum ersten Mal von Mongoose erstellt wurde. Dieser Schlüsselwert enthält die interne Revision des Dokuments. Der Name dieser Dokumenteigenschaft ist konfigurierbar. Der Standardwert ist __v.
Wenn dies mit Ihrer Anwendung in Konflikt steht, können Sie Folgendes konfigurieren:
Ist es sicher, mit dieser Eigenschaft festzustellen, ob gerade ein Dokument erstellt wurde (z. B. __v === 0)?
Explosion Pills
39
@ExplosionPills als zukünftige Referenz: Nein. Der Versionsschlüssel wird nur nach Vorgängen erhöht, die einen Konflikt verursachen und die Array-Positionen ändern können. Andere Updates erhöhen es nicht. Der ursprüngliche Veröffentlichungsbeitrag erklärt es ausführlich: aaronheckmann.tumblr.com/post/48943525537/…
Ricardo Tomasi
2
Gibt es eine Möglichkeit, es vor den zurückgegebenen Dokumenten in den Abfragen zu verbergen?
Diosney
6
@ Diosney query.select('-__v'). @ExplosionPills müssten Sie Mungo Middleware wie hinzufügen schema.pre('save', function (next) { this.increment(); next(); }).
wprl
3
@talentedmrjones @wprl Genau das mache ich jetzt, aber ich wollte etwas, das ich direkt in das Schema einfügen kann, also in alle Abfragen.
Diosney
73
Nun, ich kann Tonys Lösung nicht sehen ... also muss ich mich selbst darum kümmern ...
Wenn Sie version_key nicht benötigen, können Sie einfach:
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});
Wenn Sie den versionKey auf false setzen, wird das Dokument nicht mehr versioniert.
Dies ist problematisch, wenn das Dokument ein Array von Unterdokumenten enthält. Eines der Unterdokumente könnte gelöscht werden, wodurch die Größe des Arrays verringert wird. Später könnte eine andere Operation an der ursprünglichen Position auf das Unterdokument im Array zugreifen.
Da das Array jetzt kleiner ist, kann es versehentlich auf das falsche Unterdokument im Array zugreifen.
Der versionKey löst dieses Problem, indem er das Dokument mit einem versionKey verknüpft, der von Mungo intern verwendet wird, um sicherzustellen, dass auf die richtige Sammlungsversion zugegriffen wird.
Antworten:
Von hier aus :
quelle
__v === 0
)?query.select('-__v')
. @ExplosionPills müssten Sie Mungo Middleware wie hinzufügenschema.pre('save', function (next) { this.increment(); next(); })
.Nun, ich kann Tonys Lösung nicht sehen ... also muss ich mich selbst darum kümmern ...
Wenn Sie version_key nicht benötigen, können Sie einfach:
Wenn Sie den versionKey auf false setzen, wird das Dokument nicht mehr versioniert.
Dies ist problematisch, wenn das Dokument ein Array von Unterdokumenten enthält. Eines der Unterdokumente könnte gelöscht werden, wodurch die Größe des Arrays verringert wird. Später könnte eine andere Operation an der ursprünglichen Position auf das Unterdokument im Array zugreifen.
Da das Array jetzt kleiner ist, kann es versehentlich auf das falsche Unterdokument im Array zugreifen.
Der versionKey löst dieses Problem, indem er das Dokument mit einem versionKey verknüpft, der von Mungo intern verwendet wird, um sicherzustellen, dass auf die richtige Sammlungsversion zugegriffen wird.
Weitere Informationen finden Sie unter: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html
quelle
resultFromMongo.toObject({ versionKey: false })
, um den Wert zu unterdrücken.schema.set('versionKey', false);
Wir können versionKey: false in der Schemadefinition verwenden
quelle