0

我正在尝试按照typegooseTaskOutcome文档在我的Task模型中保存一组子文档:

import { prop } from '@typegoose/typegoose';

class TaskOutcome {
   @prop({ required: true }) public inputId: string;
   @prop() public label?: string;
   @prop() public value?: string;
}

export class Task {
   @prop() public _id: string;
   ...
   @prop({ _id: false, type: () => [TaskOutcome] })
   public outcomes: TaskOutcome[];
}
@Injectable()
export class TaskService {

   constructor(
      @InjectModel(Task) private readonly model: ReturnModelType<typeof Task>,
   ) {}

   public async saveTask(data: TaskDTO) {
      console.log(data.outcomes);
      const options: QueryOptions = { upsert: true, new: true };
      const result = await this.model.findByIdAndUpdate(data.id, data, options);
      console.log(result.outcomes);
   }
}

当我保存一个任务文档时,它的所有道具都按预期保存,除了outcomes数组子文档。相反,我得到的只是一个空对象数组。因此,即使console.log上面的第一个向我显示了正确的输入数据,第二个console.log也给了我[{},{},{}](在检查数据库时确认)。

有什么明显的我做错了吗?

我正在使用@nestjs/core@8.2.4, @typegoose/typegoose@9.3.1,nestjs-typegoose@7.1.38mongoose@6.1.2

4

1 回答 1

0

啊啊啊。不理我。上面的代码运行良好。

相反,Nest.js 似乎存在一个错误ValidationPipe,它非常巧妙地破坏了我传入的 TaskDTO 数据 - 所以我的outcomes数组在控制台中乍一看还不错,但实际上是数组数组,而不是对象数组

所以 typegoose 正确地忽略了它。如果有人偶然发现这个问题,请检查您保存的数据是否确实应该是

于 2022-01-06T16:02:16.550 回答