몽구스의“__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
쿼리에서 반환 된 문서에서 숨길 수있는 방법이 있습니까?
diosney

6
@diosney query.select('-__v'). @ExplosionPills 같은 몽구스 미들웨어를 추가해야합니다 schema.pre('save', function (next) { this.increment(); next(); }).
wprl

3
@talentedmrjones @wprl 이것이 바로 지금하고있는 일이지만 모든 쿼리 에서 스키마에 직접 넣을 수있는 것을 원했습니다 .
diosney

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

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

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

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

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


31
그것을 거짓으로 설정 한 결과는 무엇입니까?
xperator 2016

3
을 호출 resultFromMongo.toObject({ versionKey: false })하여 값을 놀라게 할 수도 있습니다 .
레오 거버

@xperator 구성표의 결과는 __V 필드가 아닙니다 : { "_id": { "$ oid": "5aa62e99f36d28237f1a41ad"}, "email": "scott@gmail.com", "sessions": 0} vs { "_id ": {"$ oid ":"5aa62e99f36d28237f1a41ad "},"email ":"scott@gmail.com ","sessions ": 0,"__v ": 0}
dang

또는 이것schema.set('versionKey', false);
Stan Wiechers

1
거짓으로 설정 한 후 결과는 무엇입니까? 문서에없는 것 이외의 다른 것?
누군가 특별한

0

스키마 정의에서 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();
        });
    }

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.