在将结果发送到视图之前,无法在路由中更改 MongoDB/MongooseJS 的结果(Node js)

Jes*_*sen 4 routes view mongoose mongodb node.js

在我的路线中,我试图在将它发送到我的视图之前替换我从数据库中获得的任何值。

在这种情况下,我试图用用户名替换对用户的引用。但是我的 console.log 只是保持返回值不变。

app.get('/message/inbox', function(req, res) {
    var _id = req.user._id;
    var inbox = null;
    var users = null;
    async.parallel([
        function(callback){
            Inbox.find({to: _id}, callback);
        },
        function(callback){
            User.find({}, callback);
        }
    ],
    function(err, result){
        inbox = result[0];
        users = result[1];
        for(var i = 0; i < inbox.length; i++) {
            for(var j = 0; j < users.length; j++) {
                if(String(inbox[i].from) == String(users[j]._id)) {
                    inbox[i].from = users[j].local.username;
                    console.log(users[j].local.username);
                    console.log(inbox[i].from);
                    break;
                }
            } 
        }
        console.log(inbox);
    });
});
Run Code Online (Sandbox Code Playgroud)

这是我的控制台返回的内容:

some@email.com
540468daeb56d5081ade600d
[ { _id: 54084cacf212815422aabe94,
    from: 540468daeb56d5081ade600d,
    to: 5406bf4c8a8acc88120922dc,
    headline: 'Some Headline',
text: 'Some text',
__v: 0 } ]
Run Code Online (Sandbox Code Playgroud)

Nei*_*unn 7

从查找请求返回的是一个“猫鼬文档”,它实际上非常复杂,包含关联模式中的所有规则和方法。您不能在架构上设置的约束之外修改它。

所以尽管序列化形式简单,对象却相当复杂。您想要的只是一个基本对象,因此您可以随意修改它。所以简单地说,只需调用.toObject()获取“原始”JavaScript 对象,而无需其他糖:

inbox = result[0].toObject();
users = result[0].toObject();
Run Code Online (Sandbox Code Playgroud)

基本对象没有方法也没有规则。修改掉。