修改Mongoose返回的对象

时间:2017-03-20 20:00:16

标签: json node.js mongodb mongoose model

我一直在研究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类中使用只返回所需值的函数来轻松实现。

可以吗?!

1 个答案:

答案 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))
})