Mongoose中find后用project重命名字段失效,是否仅能通过aggregate实现?
关于Mongoose中find查询后project重命名字段的问题
直接用find()链式调用project()没法实现字段重命名,这种写法只会被当成字段筛选(包含或排除),比如你的代码project({age: 'ageUser'})是无效的,Mongoose不会将其识别为重命名操作。
要实现字段重命名,必须使用聚合管道(aggregate())的$project阶段,这是唯一可行的方式。
举个正确的写法,假设你要保留email、name字段,把age重命名为ageUser:
this.userModel.aggregate([ { $match: usersFilterQuery }, // 对应find的查询条件 { $project: { ageUser: "$age", email: 1, name: 1 } } ]);
原因很直白:find()的投影操作(不管用project()还是select())仅负责选择返回哪些字段,不支持字段重命名;而聚合管道的$project是MongoDB原生支持的字段映射操作,能完成重命名需求。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

