我一直在研究Mongoose的文档,但我无法找到实现我想做的事情的方法。 考虑MongoDB Users集合。 还要考虑一个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类中使用只返回所需值的函数来轻松实现。
可以吗?!
答案 0 :(得分:2)
您可以在用户架构上为此创建静态方法。在模式和模型创建之间定义静态方法非常重要。另请注意,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))
})