我正在使用 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/