用文档中的字段填充模型



我有一些mongo集合Cats有许多字段:

[{
_id: 'ObjectId'
param1: 'param1',
param2: 'param2'
}]

我有nestjs应用程序,我定义模式为:

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
export type CatDocument = Cat & Document;
@Schema()
export class Cat {
@Prop()
param1: string;
}
export const CatSchema = SchemaFactory.createForClass(Cat);

Someware in CatService…

async findAll(): Promise<Cat[]> {
return this.catModel.find().exec();
}

当我尝试控制台记录请求的结果时,我得到了所有字段,例如:

[{
_id: 'ObjectId'
param1: 'param1',
param2: 'param2'
}]

问:我怎么能得到json只有我的模式定义的字段?toJSON变换?

@Schema({
versionKey: false,
toJSON: {
transform: (doc: Document<Cat>, ret) => {
ret = Object.assign(
{},
...Object.keys(CatSchema.paths).map((key) => {
return { [key]: ret[key] };
}),
);
delete ret._id;
delete ret.__v;
return ret;
},
},
})

find的结果是一个数组,你应该使用lean()

this.catModel.find({},"-_id -__v").lean()

但是对于findOnefindById,你可以使用toObject()toJson(),因为结果是一个对象

this.catModel.findById(catID,"-_id -__v").toObject

最新更新