尝试将来自mongoose查询的两个结果对象组合到一个对象中。 为什么这不起作用?任何想法如何使这项工作?
exports.get = function(req, res, err) {
Project.findOne({
_id: req.params.id
}, function(err, project) {
Client.findOne({
_id: project.clientId
}, function(err, client) {
project.foo = "bar" // works
project.client = client; // why is this not working?
res.send(project); // object has property "foo" but no property "client"
})
})
}
答案 0 :(得分:0)
Mongoose documents 不允许添加属性。您需要在 exec()
之前调用lean()
方法,因为启用了精益选项的查询返回的文档是普通的javascript对象。
来自文档:
Project.find().lean().exec(function (err, project) {
project[0] instanceof mongoose.Document // false
});
所以你的代码应该是这样的:
exports.get = function(req, res, err) {
Project.findOne({ '_id': req.params.id })
.lean()
.exec(function(err, project) {
Client.findOne({ '_id': project.clientId })
.lean()
.exec(function(err, client) {
project.foo = "bar" // works
project.client = client; // works
res.send(project); // object has both properties
});
});
}
或将返回的文档强制转换为普通的JS对象:
exports.get = function(req, res, err) {
Project.findOne({
_id: req.params.id
}, function(err, project) {
Client.findOne({
_id: project.clientId
}, function(err, client) {
var obj = project.toObject();
obj.foo = "bar" // works
obj.client = client; // works
res.send(obj); // object has both properties
})
})
}