Nestjs: Свойство не существует в документе Мангуста

#node.js #mongodb #typescript #mongoose #nestjs

Вопрос:

Я использую Nestjs с Мангустом и сталкиваюсь с некоторыми проблемами с этим кодом:

 import { Injectable } from '@nestjs/common';
import { Key, KeyDocument } from '@app/mongo';
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';

@Injectable()
export class KeysService {
  constructor(
    @InjectModel(Key.name) private readonly KeysModel: Model<KeyDocument>
  ) {
    this.test()
  }

  private async test(): Promise<void> {
    await this.KeysModel
      .find()
      .cursor()
      .eachAsync(async (key) => {
        key.token = 'lllsdfsd';
        await key.save()
      })
  }
}

 

Почему-то моя служба внутри .eachAsync не может видеть типы документов.

Нет типов для документов

Файл схемы типичен для документов Nestjs:

 import { Document } from "mongoose";
import { Prop, SchemaFactory } from '@nestjs/mongoose';

export type KeyDocument = Key amp; Document;

export class Key {
  @Prop()
  _id: string;

  @Prop({ required: true })
  secret: string;

  @Prop()
  token: string;

  @Prop()
  expired_in: number;

  @Prop()
  tags: string[];
}

export const KeysSchema = SchemaFactory.createForClass(Key);

 

Почему может возникнуть такая проблема и как ее решить?

Я также попытался создать свой собственный специальный интерфейс. с точно такими же полями, что и схема, и добавьте ее export type KeyDocument = Key amp; Document<IKey>; , но для меня это не работает.

Ответ №1:

Похоже, решение было тривиальным, и я слишком рано начинаю паниковать. Я просто забыл объявить тип интерфейса для arg в eachAsync функции.

 await this.KeysModel
  .find()
  .cursor()
  .eachAsync(async (key: KeyDocument): Promise<void> => {
     key.token = 'lllsdfsd';
     await key.save()
  })