मानगो में "__v" क्षेत्र क्या है


304

मैं संस्करण 2.2 के Mongooseसाथ MongoDBसंस्करण 3 का उपयोग कर रहा हूं । मैंने देखा है कि __vमेरे MongoDBदस्तावेजों में एक क्षेत्र दिखाई देने लगा है । यह संस्करण के साथ कुछ करना है? इसका उपयोग कैसे किया जा सकता है?


यदि आप परिणाम में इसका उपयोग नहीं करना चाहते हैं तो लौटे ऑब्जेक्ट फॉर्म मोंगोज़ पर _doc
moein rahimi

जवाबों:


295

से यहाँ :

versionKeyएक संपत्ति प्रत्येक दस्तावेज़ पर सेट जब पहली नेवला द्वारा बनाई गई है। इस कुंजी मान में दस्तावेज़ का आंतरिक संशोधन होता है। इस दस्तावेज़ की संपत्ति का नाम विन्यास योग्य है। डिफ़ॉल्ट है__v

यदि यह आपके आवेदन से टकराता है तो आप इस तरह से कॉन्फ़िगर कर सकते हैं:

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

19
क्या इस संपत्ति का उपयोग यह निर्धारित करने के लिए सुरक्षित है कि क्या एक दस्तावेज़ अभी बनाया गया था (जैसे __v === 0)?
धमाका गोलियां

39
@ExplosionPills भविष्य के संदर्भ के लिए: नहीं। संस्करण कुंजी केवल उन परिचालनों के बाद बढ़ाई गई है जो एक संघर्ष का कारण बन सकते हैं, सरणी पदों को संशोधित कर सकते हैं। अन्य अपडेट इसे नहीं बढ़ाएंगे। मूल रिलीज़ पोस्ट इसे विस्तार से बताती है: aaronheckmann.tumblr.com/post/48943525537/…
रिकार्डो

2
क्या प्रश्नों से लौटे डॉक्स से इसे छिपाने का कोई तरीका है?
डायसोनी

6
@diosney query.select('-__v')। @ExplosionPills की तरह आपको mongoose मिडलवेयर को जोड़ना होगा schema.pre('save', function (next) { this.increment(); next(); })
19

3
@talentedmrjones @wprl ठीक यही अब मैं कर रहा हूं, लेकिन मैं कुछ ऐसा चाहता था जिसे मैं स्कीमा में सीधे सीधे सभी प्रश्नों में डाल सकूं
डायोसनी

73

ठीक है, मैं टोनी का समाधान नहीं देख सकता ... इसलिए मुझे इसे स्वयं संभालना होगा ...


यदि आपको version_key की आवश्यकता नहीं है, तो आप बस कर सकते हैं:

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

VersionKey को गलत पर सेट करने का अर्थ है कि दस्तावेज़ अब संस्करणित नहीं है।

यह समस्याग्रस्त है यदि दस्तावेज़ में सबडैक्शंस का एक सरणी है। सबडैक्शंस में से एक को हटाया जा सकता है, जिससे सरणी का आकार कम हो जाता है। बाद में, एक अन्य ऑपरेशन यह मूल स्थिति में सरणी में उप-सांचा तक पहुंच सकता है।

चूंकि सरणी अब छोटा है, इसलिए यह गलती से सरणी में गलत सबडिमेंक्शंस तक पहुंच सकता है।

VersionKey इस दस्तावेज़ को एक versionKey के साथ जोड़कर हल करता है, mongoose द्वारा आंतरिक रूप से उपयोग किया जाता है ताकि यह सुनिश्चित हो सके कि यह सही संग्रह संस्करण का उपयोग करता है।

अधिक जानकारी के लिए यहां पाया जा सकता है: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html


31
इसे गलत पर सेट करने का परिणाम क्या है?
एक्सपेक्टर

3
resultFromMongo.toObject({ versionKey: false })मूल्य को कम करने के लिए आप कॉल भी कर सकते हैं ।
सिंह जेरब 20

@xperator इस योजना में कोई __V क्षेत्र नहीं है: {"_id": {"$ oid": "5aa62e99f36d28237f1a41ad"}, "ईमेल": "scott.mail.com", "सत्र": 0} बनाम {"_id" ": {" $ OID ":" 5aa62e99f36d28237f1a41ad "}," ईमेल ":" scott@gmail.com "," सत्र ": 0," __v ": 0}
डांग

या यहschema.set('versionKey', false);
स्टेन विचर्स

1
झूठे की स्थापना के बाद बाहर क्या आया है? इसके अलावा दस्तावेज़ में नहीं है?
कोई विशेष

0

हम VersionKey का उपयोग कर सकते हैं : स्कीमा परिभाषा में गलत

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

}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.