日常开发的时候,我们从数据库查询数据,然后返回给前端,但希望前端不需要输出某些字段。举例来说:
有个Demo数据库结构:
{
id: ObjectId;
name: string;
value1: string;
value2: string;
created: Date;
updated: Date;
}
我们定义了一个返回的数据结构 RespDemo:
{
id: ObjectId;
name: string;
value1: string;
value2: string;
}
那么如何快速简单把 Demo 转换为 RespDemo 呢?
从数据库里面查询(Mongodb,Mongoose):
const list = this.demoRepository.find(condition, {}, {});
上述查询如果直接返回 list 是不行的,会有多余的created和updated。
一种方法是使用投影,排除掉不需要的字段:
const list = await this.demoRepository.find(condition, { created: 0, updated: 0 }, {});
另外一种方法是可以用对象解构快速实现:
const list = this.demoRepository.find(condition, {}, {});
const ret = list.map( value => {
const { _id, created, updated, rest } = (value as any).toObject();
return rest;
});
return ret;
利用上面的方法, rest 就是一个不含多余字段的 RespDemo 对象了。
当然,我们也可以使用lodash来达到目的:
使用 Lodash 的 pick 函数:如果要返回的字段是源数据结构中的一部分,可以使用 Lodash 的 pick 函数来提取所需的字段。例如:
const list = await this.demoRepository.find(condition, {}, {});
const respList = list.map(demo => _.pick(demo, ['id', 'name', 'value1', 'value2']));