Ich verwende Mongoose
Version 3 mit MongoDB
Version 2.2. Ich habe festgestellt __v
, dass in meinen MongoDB
Dokumenten ein Feld angezeigt wird . Hat das etwas mit Versionierung zu tun? Wie wird es benutzt?
Ich verwende Mongoose
Version 3 mit MongoDB
Version 2.2. Ich habe festgestellt __v
, dass in meinen MongoDB
Dokumenten ein Feld angezeigt wird . Hat das etwas mit Versionierung zu tun? Wie wird es benutzt?
Antworten:
Von hier aus :
Dies
versionKey
ist 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:
new Schema({..}, { versionKey: '_somethingElse' })
__v === 0
)?
query.select('-__v')
. @ExplosionPills müssten Sie Mungo Middleware wie hinzufügen schema.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:
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
});
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
resultFromMongo.toObject({ versionKey: false })
, um den Wert zu unterdrücken.
schema.set('versionKey', false);
Wir können versionKey: false in der Schemadefinition verwenden
'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();
});
}
}