Typegoose 未在 Nest.js 应用程序中正确保存数组子文档

Typegoose is not saving array subdocuments properly in Nest.js app

我正在尝试在我的 Task 模型中保存一组 TaskOutcome 子文档,遵循 typegoose documentation:

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.1nestjs-typegoose@7.1.38mongoose@6.1.2

呜呜呜。不理我。上面的代码工作得很好。

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

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