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?
Antworten
Zu viele Anzeigen?Das Feld '__v' in unserem 'Dokument' dient ' optimisticConcurrency' Bedenken.
Dieser Begriff bedeutet in etwa Mungo: let, Sie haben ein Dokument mit 'findOne, findById' gegriffen, aber no und was, wenn in diesem Intervall ein anderer Code dasselbe Dokument gegriffen und die Methode .save() vor der ersten Dokumenteninstanz verwendet hat. In diesem Anwendungsfall, wenn wir (Mongoose-spezifisch) eine Art Versionsfehler auslösen wollen, verwenden wir optimisticConcurrency: true
Option im Schema.
und dann wird mongoose '__v1' verwenden, um diese beiden Dokumente zu vergleichen.
ohne optimisticConcurrency: true
Option. __v' hat keine Auswirkung. und Mongoose wird sie nicht um 1 erhöhen.
Hinweis: Bei Operationen der Art 'findOneAndUpdate' wird '__v' nicht aktualisiert. (nur save() aktualisiert)
En __v
wird als Versionsschlüssel bezeichnet. Er beschreibt die interne Revision eines Dokuments. Diese __v
Feld wird verwendet, um die Überarbeitungen eines Dokuments zu verfolgen. Standardmäßig ist sein Wert Null ( __v:0
).
Wenn Sie diesen Versionsschlüssel nicht verwenden möchten, können Sie den versionKey: false
als mongoose.Schema
Parameter.
Sie können diesem Beispiel folgen...
const mongoose = require('mongoose');
const userSchema = mongoose.Schema(
{
name: {
type: String,
require: true
},
email: {
type: String,
unique: true
},
password: {
type: String,
}
},
{
timestamps: true,
versionKey: false, // Here You have to add.
}
)
module.exports = mongoose.model('tbl_user', userSchema)
Wir können verwenden versionKey: false in der Schemadefinition
'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();
});
}
}
- See previous answers
- Weitere Antworten anzeigen