Как убрать version key из Nest приложения в Mongo DB?

В Nest приложении по умолчанию модели создаются с полем "versionKey". Это поле предназначено для оптимистической блокировки при обновлении документов в MongoDB. Однако, в некоторых случаях, вам может понадобиться убрать это поле из модели. Вот несколько способов сделать это:

1. Указать опцию versionKey: false при создании схемы:

@Module({
    imports: [
        MongooseModule.forRoot('mongodb://localhost/my-database'),
        MongooseModule.forFeature([{ name: 'MyModel', schema: MySchema }])
    ],
    providers: [MyService],
    controllers: [MyController]
})
export class AppModule {}
import { Schema } from 'mongoose';

const MySchema = new Schema(
  { ... },
  { versionKey: false }
);

Этот способ позволяет установить versionKey в значение false для всей схемы и убрать его из всех моделей, созданных на основе этой схемы.

2. Добавить опцию versionKey в @Schema декораторе непосредственно к классу модели:

@Schema({ versionKey: false })
export class MyModel extends Document {
  ...
}

Этот способ позволяет установить versionKey в значение false для конкретной модели, не затрагивая другие модели.

3. Установить значение false для versionKey при сохранении/обновлении документа в базе данных:

const myModel = await this.myModelModel.findOneAndUpdate(
  { _id: 'some-id' },
  { ... },
  { versionKey: false }
);

Этот способ позволяет установить versionKey в значение false только для конкретной операции сохранения/обновления.

Убрав versionKey из модели, учтите, что вы теряете оптимистическую блокировку, которую он предоставляет. Это означает, что вы не сможете автоматически обрабатывать ситуации, когда документ был изменен другим пользователем после его получения. Вы должны принять решение, основываясь на ваших потребностях и требованиях к проекту.