#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()
})