মঙ্গুজে "__v" ক্ষেত্রটি কী?


304

আমি ব্যবহার করছি Mongooseসংস্করণ 3 MongoDBসংস্করণ 2.2। আমি লক্ষ্য করেছি যে __vআমার MongoDBনথিগুলিতে একটি ক্ষেত্র প্রদর্শিত শুরু হয়েছে । সংস্করণ দিয়ে কিছু করা কি? এটি কীভাবে ব্যবহৃত হয়?


আপনি যদি ফলাফলটি না চান তবে প্রত্যাশিত অবজেক্ট ফর্মের উপর ডকটি ব্যবহার করুন
মঙ্গেইন রহিমি

উত্তর:


295

থেকে এখানে :

versionKeyএকটি সম্পত্তি প্রতিটি দস্তাবেজের উপর সেট যখন প্রথম নকুল দ্বারা নির্মিত। এই কী মানটিতে নথির অভ্যন্তরীণ পুনর্বিবেচনা রয়েছে। এই নথির সম্পত্তিটির নামটি কনফিগারযোগ্য। ডিফল্ট হয় __v

আপনার অ্যাপ্লিকেশনের সাথে যদি এই বিরোধ হয় তবে আপনি এটি কনফিগার করতে পারেন:

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

19
কোনও দস্তাবেজ স্রেফ তৈরি করা হয়েছে (উদাহরণস্বরূপ __v === 0) এই সম্পত্তিটি নির্ধারণ করা কি নিরাপদ ?
বিস্ফোরণ বড়ি

39
ভবিষ্যতের রেফারেন্সের জন্য এক্সপ্লোশনপিলস: না। সংস্করণ কীটি কেবলমাত্র অপারেশনগুলির পরে বাড়ানো হবে যা অ্যারে অবস্থানগুলি সংশোধন করে কোনও দ্বন্দ্বের কারণ হতে পারে। অন্যান্য আপডেটগুলি এটি বৃদ্ধি করবে না। আসল প্রকাশের পোস্টটি এটিকে বিশদভাবে ব্যাখ্যা করেছে: aaronheckmann.tumblr.com/post/48943525537/…
রিকার্ডো

2
প্রশ্নগুলি থেকে ফিরে আসা ডক্স থেকে এটিকে লুকানোর কোনও উপায় আছে কি?
ডায়োসনি

6
@diosney query.select('-__v')। @ এক্সপ্লোশনপিলসগুলিতে আপনার পছন্দ মতো মংগস মিডলওয়্যার যুক্ত করা দরকার schema.pre('save', function (next) { this.increment(); next(); })
wprl

3
@ ট্যালেন্টেডমরজোনস @wprl আমি এখন যা করছি ঠিক তা-ই করছি, তবে আমি এমন কিছু চাইছিলাম যা আমি স্কিমায় সরাসরি রাখতে পারব তাই সমস্ত প্রশ্নের মধ্যে।
ডায়োজনি

73

ঠিক আছে, আমি টনির সমাধান দেখতে পাচ্ছি না ... তাই আমাকে নিজেই এটি পরিচালনা করতে হবে ...


আপনার যদি ভার্সন_কি প্রয়োজন না হয় তবে আপনি কেবল পারেন:

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

সংস্করণকে মিথ্যাতে সেট করা মানে দস্তাবেজটির আর সংস্করণ হয় না।

যদি দস্তাবেজটিতে সাব-ডকুমেন্টের একটি অ্যারে থাকে তবে এটি সমস্যাযুক্ত। সাব-ডকুমেন্টগুলির একটি মুছে ফেলা হতে পারে, অ্যারের আকার হ্রাস করে। পরে, অন্য ক্রিয়াকলাপটি অ্যারেতে সাবডোকামেন্টটি তার আসল অবস্থানে অ্যাক্সেস করতে পারে।

অ্যারে এখন ছোট হওয়ায় এটি ভুলবশত অ্যারেতে ভুল সাবডোসামেন্ট অ্যাক্সেস করতে পারে।

সংস্করণকী ডকুমেন্টটিকে একটি সংস্করণকির সাথে সংযুক্ত করে সমাধান করে যা মংগুজ অভ্যন্তরীণভাবে ব্যবহার করে এটি সঠিক সংগ্রহ সংস্করণে প্রবেশ করে কিনা তা নিশ্চিত করে।

আরও তথ্য এখানে পাওয়া যাবে: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html


31
এটি মিথ্যা সেট করার ফলাফল কি?
এক্সপেটার

3
আপনি resultFromMongo.toObject({ versionKey: false })মান কল্পনা করতে, কল করতে পারেন ।
লিও গারবার

@ এক্সপিটারের ফলাফলটি এই প্রকল্পে কোনও __V ক্ষেত্র নয়: {"_id": {"$ oid": "5aa62e99f36d28237f1a41ad"}, "ইমেল": "স্কট@gmail.com", "সেশনস": 0} বনাম _ "_আইডি ": {" $ OID ":" 5aa62e99f36d28237f1a41ad "}," ইমেল ":" scott@gmail.com "," সেশন ": 0," __v ": 0}
Dang

বা এটিschema.set('versionKey', false);
স্ট্যান ওয়াইচার্স

1
মিথ্যে সেট করার পরে কি হবে? ডকুমেন্টে তা ছাড়া আর কি?
কেউ বিশেষ

0

আমরা ভার্সনকি ব্যবহার করতে পারি: স্কিমা সংজ্ঞাতে মিথ্যা

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

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.