问题描述 查询时需要将主键返回给客户端,使用mongoose默认的_id,但是不太符合我们团队的习惯,想把_id重名民为id,又不能改变数据库的结构。 单条查询还可以直接修改,但是多条查询就有点痛苦的。感觉mongoose应该有这个功能,但是找了半天没找到,大佬们有知道的还望告知。
示例代码
Role.find({}).limit(param.page_size).skip(param.page_no - 1)
解决方案 多谢各位大佬的回复,尤其是 @lovegnep ,自己的问题已经基本解决,贴上代码
// service处理
find(param: object | any): Promise<any> {
const _para: any = paramMapByArr(param, ['role_id', 'user_name', 'status', 'tel', 'qq', 'wechart', 'professional_class', 'credit_rating']);
// return User.find(_para).limit(param.page_size).skip(param.page_no - 1);
return User.aggregate([
{
$match: _para
},
{
$limit: param.page_size
},
{
$skip: param.page_no - 1
},
{
$project: {
id: '$_id',
_id: '$-',
user_name: '$user_name',
login_ip: '$login_ip',
// ...
}
}
]).exec();
}
// controller
async find(ctx: BaseContext, next: any) {
// 判断权限
// 参数
const param = ctx.request.body;
param.page_size = param.page_size || 10;
param.page_no = param.page_no > 0 ? param.page_no : 1;
try {
// 自动扫描注入
const user = await service.user.find(param);
ctx.rest(user);
} catch (err) {
ctx.body = { code: 1, message: err.message };
}
},
向各位大佬敬礼