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?

4voto

ratyacatnug Punkte 96

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)

2voto

Nandeep Barochiya Punkte 136

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)

0voto

KARTHIKEYAN.A Punkte 14230

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

}

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