[mongodb/mongoose] __v 필드
[참고자료]
What is the "__v" field in Mongoose
I'm using Mongoose version 3 with MongoDB version 2.2. I've noticed a __v field has started appearing in my MongoDB documents. Is it something to do with versioning? How is it used?
stackoverflow.com
Mongoose v6.5.4: Schemas
If you haven't yet done so, please take a minute to read the quickstart to get an idea of how Mongoose works. If you are migrating from 5.x to 6.x please take a moment to read the migration guide. Everything in Mongoose starts with a Schema. Each schema ma
mongoosejs.com
__v 필드 는 versionKey 를 의미합니다.
해당 다큐먼트의 버젼을 나타냅니다.
모든 다큐먼트에 _id가 있듯 __v 필드도 다큐먼트 생성할때 자동으로 만들어집니다.
__v 필드의 기본값은 0 입니다.
versionKey 는 몽구스로부터 처음으로 만들어진 각 다큐먼트의 프로퍼티 입니다.
versionKey 옵션은 버젼을 나타내기 위한 문자열 입니다.
다큐먼트의 버젼을 나타내는 __v 필드를 사용하지 않다면
되도록이면 __v 필드와 버젼을 나타내는 작업을 더이상 하지 않는 경우가 아니라면 disable을 시키지 않는게 좋습니다.
즉, __v 필드로 버젼을 나타내도록 그대로 두는게 좋습니다.
그럼에도 버젼을 나타내는것을 그만두고 싶다면
versionKey 옵션에 false 를 표기하면 됩니다.
new Schema({ ... }, { versionKey: false });
const Thing = mongoose.model("Thing", schema);
const thing = new Thing({ name: 'no versioning please' });
thing.save();
mongoose는 save() 를 호출할 때마다 __v(versionKey) 를 업데이트 합니다.
update(), findOneAndUpdate() 를 호출할 경우에는 __v(versionKey) 를 업데이트 하지 않습니다.