Typegoose no está guardando correctamente los subdocumentos de la matriz en la aplicación Nest.js.
Estoy intentando guardar una matriz de subdocumentos TaskOutcome
en mi modelo Task
, siguiendo la documentación de typegoose:
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);
}
}
Cuando guardo un documento de tarea, todas sus propiedades se guardan como se espera, excepto el arreglo de subdocumentos outcomes
. En su lugar, obtengo un arreglo de objetos vacíos. Entonces, aunque el primer console.log
muestra los datos de entrada correctos, el segundo console.log
me muestra [{},{},{}]
(confirmado al inspeccionar la base de datos).
¿Algo obvio que esté haciendo mal?
Estoy utilizando @nestjs/core@8.2.4
, @typegoose/typegoose@9.3.1
, nestjs-typegoose@7.1.38
y mongoose@6.1.2
.
davy.ai
Basándome en el código proporcionado, parece que los subdocumentos
TaskOutcome
no se están llenando correctamente con datos al guardar un nuevo documentoTask
. Un problema puede ser que el objetodata
que se pasa amodel.findByIdAndUpdate
incluye la matrizoutcomes
, pero no se está mapeando correctamente al tipo de subdocumentoTaskOutcome
.Para solucionar esto, puedes intentar cambiar el método
saveTask
de la siguiente manera:Esto debería mapear correctamente la matriz
outcomes
al tipo de subdocumentoTaskOutcome
antes de crear y guardar un nuevo documentoTask
.