使用Mongoose模型方法findOne
,我收到一个模型。现在我想在将模型发送到客户端之前自定义该模型,将几个属性扩充到该模型中。
然而,我目前发现的唯一方法是将该模型转换为普通对象并扩充该对象。
我不知道有没有更好的办法呢?
这是我用于这个简单目的的冗长代码:
Topic.find({}).exec(function (err, topics) {
var i, topic_obj, topic_obj_list;
topic_obj_list = [];
if (err) { return next(err); }
for (i = 0; i < topics.length; i++) {
topic_obj = topics[i].toObject();
if (req.user.is_following) {
topic_obj.is_following = true;
} else {
topic_obj.is_following = false;
}
topic_obj_list.push(topic_obj);
}
return res.json(200, topic_obj_list);
});
P / S:我已经尝试过简单的解决方案,例如:topic [i] .is_following = true,它不起作用。
答案 0 :(得分:3)
您可以将其缩短为以下内容:
Topic.find({}).exec(function (err, topics) {
if (err) { return next(err); }
return res.json(topics.map(function(topic) {
return topic.set(
'is_following',
req.user.is_following ? true : false,
{ strict : false }
);
}));
});
说明:
topics.map
在topics
数组的每个项目上运行一个函数;从函数返回的值最终在map
; topic.set(FIELD, VALUE, [{ strict : false }])
,您可以添加/覆盖Mongoose文档的字段;当strict
为false
时,该字段不必存在于架构中;