[node.js] 몽구스의“__v”필드는 무엇입니까

버전 2.2 Mongoose와 함께 MongoDB버전 3을 사용하고 있습니다. 나는 나타났습니다 __v내에서 나타나기 시작했다 필드 MongoDB문서를. 버전 관리와 관련이 있습니까? 어떻게 사용 되나요?



답변

에서 여기 :

versionKey제 몽구스 의해 생성 될 때, 각 문서에 설정된 속성이다. 이 키 값에는 문서의 내부 개정이 포함됩니다. 이 문서 속성의 이름을 구성 할 수 있습니다. 기본값은 __v입니다.

이것이 애플리케이션과 충돌하는 경우 다음과 같이 구성 할 수 있습니다.

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


답변

글쎄, 나는 토니의 해결책을 볼 수 없다.


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를 false로 설정하면 문서가 더 이상 버전 화되지 않습니다.

문서에 하위 문서 배열이 포함되어 있으면 문제가됩니다. 하위 문서 중 하나를 삭제하여 배열 크기를 줄일 수 있습니다. 나중에 다른 작업이 배열의 하위 문서를 원래 위치에 액세스 할 수 있습니다.

배열이 더 작으므로 실수로 배열의 잘못된 하위 문서에 액세스 할 수 있습니다.

versionKey는 문서를 올바른 컬렉션 버전에 액세스하기 위해 내부적으로 mongoose가 사용하는 versionKey와 연관 시켜서이를 해결합니다.

자세한 내용은 http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html을 참조하십시오.


답변

스키마 정의에서 versionKey : false 를 사용할 수 있습니다 .

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

}


답변