我正在开发Web应用程序。 后端部分是使用Mongoose用NodeJS编写的。
我有一个简单的用户模式:
const UsersSchema = new Schema({
login: {
type: String,
required: true,
lowercase: true,
trim: true,
unique: true
},
password: {
type: String,
required: true,
trim: true
},
email: {
type: String,
required: true,
trim: true
},
firstName: {
type: String,
required: true,
trim: true
},
lastName: {
type: String,
required: true,
trim: true
}
});
我需要返回以添加fullName
属性,而无需将其实际添加到数据库中。当然,我可以像这样this.firstName + " " + this.lastName
进行连接。
但是我不知道是否有更好的方法来获得期望的行为。
我还使用mongoose-pagination-2
库来支持项目的分页:
const users = await Users.paginate({}, queryParams);
请提供一些建议。 谢谢。
答案 0 :(得分:0)
从数据库中获取数据后,您可以映射用户:
const users = await Users.paginate({}, queryParams);
users.docs = users.docs.map((user)=>{
let fname=user.firstName!=null?user.firstName:'';
let lname=user.lastName!=null?user.lastName:'';
user.fullName= fname + " " + lname;
return user;
});
答案 1 :(得分:0)
您可以使用名为Virtuals的出色功能来获得所需的结果。
它可以完全满足您的需求。
对于您的情况,您需要执行几个步骤:
定义虚拟属性和get
方法
UsersSchema.virtual('fullName').get(function () {
return this.firstName + " " + this.lastName;
});
定义虚拟属性后,您将可以从模型中访问它。但是,当您执行查询时,它将丢失。此外,您正在使用分页库。要返回虚拟属性作为查询结果,我们需要按以下方式配置toObject
和toJSON
方法:
UsersSchema.set('toObject', { virtuals: true });
UsersSchema.set('toJSON', { virtuals: true });
现在您可以查询文档,并且它也应该返回虚拟属性。