В 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
из модели, учтите, что вы теряете оптимистическую блокировку, которую он предоставляет. Это означает, что вы не сможете автоматически обрабатывать ситуации, когда документ был изменен другим пользователем после его получения. Вы должны принять решение, основываясь на ваших потребностях и требованиях к проекту.