修改 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返回值无法修改

为啥不能修改 Mongoose 查询返回的数据(例如:findById)

Mongoose 查询结果是只读的吗?

Mongoose 查询结果是只读的吗?

如何从 saveAsync 返回一个 Mongoose 对象?

Mongoose - 向回调中返回的对象添加方法