javascript - 在 query.exec() 之后设置对象的属性

标签 javascript node.js express mongoose

我正在使用 Node express 。我正在尝试填充一个从另一个字段填充的字段。但我遇到了问题,所以我尝试从另一个查询中获取值,然后将其设置为我发送的对象。

api.get('/:id', authenticate, (req, res) => {
    let query = MobileTranscation.findById(req.params.id)
        .populate('sender')
        .populate('created_by');

    query.exec((err, datas) => {
        if(datas.sender && datas.sender.parent) {
            User.findById(datas.sender.parent, (err, user) => {
                datas['parentName'] = user.username;

                console.log(datas);
                res.json(datas);
            });
        } else {
            res.json(datas);
        }
    });
});

在这里,我想从 MobileTranscation.sender 获取用户名,其中 sender 有一个包含 username 属性的父属性。我试图填充发件人,然后获取父 ID 并用它搜索 User 并获取用户名。我面临的问题是,如果我记录 datas.parentName 我可以看到我得到了用户名,但是当我发送数据时,没有parentName 属性。我在这里做错了什么?

是否可以先填充一个属性,然后再填充其中一个已填充的属性?

最佳答案

每当你执行 findById mongoose 操作时,实际上都会发送某种不可变对象(immutable对象)作为返回。所以你不能向对象添加额外的键。您实际上可以使用 .lean 函数。就像query.lean().exec((err, data) => {/** 函数体* */}) 一样。现在您可以添加所需的额外键。

关于javascript - 在 query.exec() 之后设置对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49979129/

相关文章:

javascript - 使用 Jest 测试 node-cron 作业功能

node.js - 如何在 Node.js 和 Mongoose 中在一段时间后更新用户?

javascript - Node.js req.params.locationid 没有抓取 ID

javascript - 仅当数组中尚不存在该对象时才将其添加到数组中

javascript - 如何检查html5标签中是否未加载音频文件链接

javascript - 如何改进我的 "random words cloud"函数?

node.js - 在Node.js中,使用async/await处理错误的正确方法是什么?

javascript - 如何使我的常见问题解答更易于访问?

angularjs - 在 Angular 2 应用程序中使用本地 npm 存储库中的组件

javascript - EJS 使用获取的 json 数据和 d3 图表