Moğolistan'daki “__v” alanı nedir


304

Sürüm 2.2 Mongooseile MongoDBsürüm 3 kullanıyorum . Belgelerimde bir __valanın ortaya çıkmaya başladığını fark ettim MongoDB. Sürüm oluşturma ile ilgili bir şey var mı? Nasıl kullanılır?


sonuçta istemiyorsanız döndürülen nesne formunda _doc kullanın mongoose
moein rahimi

Yanıtlar:


295

Gönderen burada :

versionKeyİlk Gelincik yarattığı zaman her belge üzerinde ayarlanmış bir özelliktir. Bu anahtarlar değeri belgenin dahili revizyonunu içerir. Bu belge özelliğinin adı yapılandırılabilir. Varsayılan değer __v.

Bu, uygulamanızla çakışıyorsa, aşağıdaki gibi yapılandırabilirsiniz:

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

19
Bir belgenin yeni oluşturulup oluşturulmadığını belirlemek için bu özelliği kullanmak güvenli __v === 0mi (örn. )?
Patlama Hapları

39
Gelecekte başvurmak için @ ExplosionPills: no. Sürüm anahtarı yalnızca çakışmaya neden olabilecek ve dizi konumlarını değiştiren işlemlerden sonra artırılır. Diğer güncellemeler artmaz. Orijinal çıkış yazısı ayrıntılı olarak açıklıyor: aaronheckmann.tumblr.com/post/48943525537/…
Ricardo Tomasi

2
Sorgulardan döndürülen dokümanlardan gizlemenin bir yolu var mı?
diosney

6
@diosney query.select('-__v'). @ ExplosionPills, mongoose ara katman yazılımı eklemeniz gerekir schema.pre('save', function (next) { this.increment(); next(); }).
wprl

3
@talentedmrjones @wprl Şu anda tam olarak bunu yapıyorum, ancak tüm sorgularda doğrudan Şemaya koyabileceğim bir şey istedim .
diosney

73

Tony'nin çözümünü göremiyorum ... bu yüzden kendim halletmek zorundayım ...


Version_key dosyasına ihtiyacınız yoksa, şunları yapabilirsiniz:

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 öğesini false olarak ayarlamak, belgenin artık sürümlenmediği anlamına gelir.

Belgede bir dizi alt belge varsa bu sorunludur. Alt dokümanlardan biri silinebilir ve dizinin boyutu küçültülebilir. Daha sonra başka bir işlem dizideki alt belgeye orijinal konumunda erişebilir.

Dizi artık daha küçük olduğundan, yanlışlıkla dizideki yanlış alt belgeye erişebilir.

VersionKey, belgeyi doğru koleksiyon sürümüne eriştiğinden emin olmak için dahili olarak mongoose tarafından kullanılan bir versionKey ile ilişkilendirerek bunu çözer.

Daha fazla bilgi için: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html


31
yanlış olarak ayarlamanın sonucu nedir?
xperator

3
resultFromMongo.toObject({ versionKey: false })Değeri aşmak için de arayabilirsiniz .
Leo Gerber

@xperator sonuç şemada __V alanı yok: {"_id": {"$ oid": "5aa62e99f36d28237f1a41ad"}, "e-posta": "scott@gmail.com", "sessions": 0} vs {"_id ": {" $ oid ":" 5aa62e99f36d28237f1a41ad "}," e-posta ":" scott@gmail.com "," oturumlar ": 0," __v ": 0}
dang

ya da buschema.set('versionKey', false);
Stan Wiechers

1
false değerine ayarlandıktan sonra sonuç nedir? belgede olmamasından başka?
özel biri

0

Şema tanımında versionKey: false komutunu kullanabiliriz

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

}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.