修改 Mongoose 返回的对象
Posted
技术标签:
【中文标题】修改 Mongoose 返回的对象【英文标题】:Modify objects returned by Mongoose 【发布时间】:2017-08-12 06:40:45 【问题描述】:我一直在研究 Mongoose 文档,但找不到实现我想做的方法。 考虑一个 MongoDB 用户集合。 还要考虑一个 Mongoose UserSchema,它包含在 DB 集合中找到的所有字段。
现在,我想将所有用户登录到控制台,但属性已更改。有点像:
Users = mongoose.UserSchema;
ApiUserSchema;
Users.find(function(err,users)
//for each user that mongoose finds,
//I want to convert from UserSchema to "ApiUserSchema"
//Something like the following:
newUsers = users.ToApiUserSchema();
console.log(newUsers);
)
users.ToApiUserSchema():
function toApiUserSchema(user)
username = user.username;
email = user.email;
someAggregate = user.Username + user.Email;
.......and so on.....;
鉴于 .find() 函数的异步类型,我不确定这是否可以完成。我来自 C# 和 php 背景,只使用关系数据库,这可以通过在 User 类中拥有一个只返回所需值的函数来轻松完成。
可以吗?!
【问题讨论】:
【参考方案1】:您可以在用户架构上为此创建静态方法。在模式和模型创建之间定义静态方法很重要。另请注意,find
返回的数组不是一个对象。
var userSchema = new mongoose.Schema(
username: String,
email: String,
password: Number
)
userSchema.statics.toApiUserSchema = function(data)
return data.map(function(user)
return
email: user.email,
username: user.username,
emailAndUsername: user.email + user.username
)
var User = mongoose.model('User', userSchema)
User.find(, function(err, users)
console.log(User.toApiUserSchema(users))
)
【讨论】:
你是我等了一整天的上帝。谢谢!以上是关于修改 Mongoose 返回的对象的主要内容,如果未能解决你的问题,请参考以下文章
为啥不能修改 Mongoose 查询返回的数据(例如:findById)