我正在使用node,nestjs和mongoose,我编写了一个get调用并获得了类似的结果
[
{
"_id": "5d4a9c0b1a6bcf14775c953c",
"material_name": "ramboo",
"material_status": 0,
"is_admin_approved": true,
"createdAt": "2019-08-07T09:38:19.237Z",
"updatedAt": "2019-08-07T09:38:19.237Z",
"id": "5d4a9c0b1a6bcf14775c953c"
}
]
这样的服务(material.service.ts)
async findAll(): Promise<IDMaterial[]> {
return await this.materialModel.find({is_admin_approved: true});
}
如何从结果中删除is_admin_approved字段
[
{
"_id": "5d4a9c0b1a6bcf14775c953c",
"material_name": "ramboo",
"material_status": 0,
"createdAt": "2019-08-07T09:38:19.237Z",
"updatedAt": "2019-08-07T09:38:19.237Z",
"id": "5d4a9c0b1a6bcf14775c953c"
}
]
如何以任何方式解决此问题,请帮助我?
答案 0 :(得分:1)
您可以使用lodash的omit函数从数组中的每个对象省略is_admin_approved
:
async findAll(): Promise<Partial<IDMaterial>[]> {
return this.materialModel
.find({is_admin_approved: true})
.then(data => data.map(item => _.omit(item.toObject(), 'is_admin_approved')));
}
您还可以在您的is_admin_approved
dto类中将@Exclude
标记为IDMaterial
,然后将检索到的项目投射到此dto(plainToClass(IDMaterial, item)
)。
export class IDMaterial {
// ...
@Exclude()
is_admin_approved: boolean;
// ...
}
// ...
async findAll(): Promise<Partial<IDMaterial>[]> {
return this.materialModel
.find({is_admin_approved: true})
.then(data => data.map(item => plainToClass(IDMaterial, item)));
}
答案 1 :(得分:0)
希望此代码可以为您提供帮助。存储结果,然后迭代并从获取的每个对象中删除项目。然后返回更改后的对象数组。
async findAll(): Promise<IDMaterial[]> {
const result = await this.materialModel.find({is_admin_approved: true});
result.map(elem => delete elem.is_admin_approved)
return result;
}