437 Stimmen

Was ist das Feld "__v" in Mongoose

Ich benutze Mongoose Version 3 mit MongoDB Version 2.2. Ich habe bemerkt, dass ein __v Feld erscheint seit kurzem in meinem MongoDB Dokumente. Hat es etwas mit der Versionierung zu tun? Wie wird sie verwendet?

419voto

Tony The Lion Punkte 59566

En hier :

En versionKey ist eine Eigenschaft, die für jedes Dokument bei der ersten Erstellung von Mongoose. Dieser Schlüsselwert enthält die interne Revision des Dokuments. Der Name dieser Dokumenteigenschaft ist konfigurierbar. Die Standardwert ist __v .

Wenn dies zu Konflikten mit Ihrer Anwendung führt, können Sie dies entsprechend konfigurieren:

new Schema({..}, { versionKey: '_somethingElse' })

109voto

kenberkeley Punkte 6502

Nun, ich kann Tonys Lösung nicht sehen... also muss ich es selbst in die Hand nehmen...


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
});

Das Setzen des versionKey auf false bedeutet, dass das Dokument nicht mehr versioniert ist.

Dies ist problematisch, wenn das Dokument eine Reihe von Unterdokumenten enthält. Eines der Unterdokumente könnte gelöscht werden, wodurch sich die Größe des Arrays verringert. Später könnte eine andere Operation auf das Unterdokument im Array an seiner ursprünglichen Position zugreifen.

Da das Array nun kleiner ist, könnte 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 mongoose intern verwendet wird, um sicherzustellen, dass es auf die richtige Version der Sammlung zugreift.

Weitere Informationen finden Sie unter: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html

17voto

Lysak Punkte 323

Zum Entfernen in NestJS müssen Sie eine Option zu Schema() Tapezierer

@Schema({ versionKey: false })

9voto

Nguyen Phu Punkte 106

Es ist möglich, den Versionsschlüssel zu deaktivieren, wenn Sie ihn nicht benötigen.

Siehe dieses Beispiel:

var User = new mongoose.Schema({
   FullName:{
       type :String,

   },
   BirthDay:{
       type :String,

   },
   Address:{
       type :String,
   },
   Gender:{
       type:String,
   },
   PhoneNumber:{
       type:Number,
       ref:'Account'
   },
   AccountID:{
        type: Schema.Types.ObjectId,
        ref: 'Account'
   },
   UserName:{
       type:String,
       ref:'Account'
   }
},{collection:'User',
   versionKey: false //here
});

4voto

Es ist der Versionsschlüssel, der bei jeder neuen Aktualisierung aktualisiert wird. Ich persönlich mag es nicht, ihn zu deaktivieren.

Lesen Sie diese Lösung, wenn Sie mehr wissen wollen [1]: Mongoose-Versionierung: Wann ist es sicher, sie zu deaktivieren?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X