在query.exec()之后将属性设置为对象

时间:2018-04-23 10:42:48

标签: 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获取用户名,其中发件人的父属性具有username属性。我试图填充发件人然后获取父ID并搜索用户并获取用户名。我面临的问题是,如果我记录datas.parentName,我可以看到我得到了用户名,但是当我发送数据时,没有parentName属性。我在这里做错了什么?

是否有可能填充一个属性然后填充其中一个人口填充的属性?

1 个答案:

答案 0 :(得分:0)

每当你执行findById时,mongoose实际上会发送某种不可变对象作为回报。因此,您无法向对象添加额外的键。你实际上可以使用.lean函数。像query.lean().exec((err, data) => { /** Function body* */ })一样。现在,您可以添加所需的额外密钥。