当我尝试更改Mongoose查询返回的数据的任何部分时,都没有效果。
我昨天花了大约2个小时尝试解决这个问题,使用了各种_.clone()
,使用临时存储变量,等等。最后,就在我觉得我快要疯了的时候,我找到了一个解决方案。所以我想将来会有人(fyuuuture!)可能会有保存问题。
Survey.findById(req.params.id, function(err, data){
var len = data.survey_questions.length;
var counter = 0;
_.each(data.survey_questions, function(sq){
Question.findById(sq.question, function(err, q){
sq.question = q; //has no effect
if(++counter == len) {
res.send(data);
}
});
});
});
发布于 2013-01-25 05:09:33
对于这样的情况,您需要一个普通的JS对象而不是一个完整的模型实例,您可以在查询链上调用lean()
,如下所示:
Survey.findById(req.params.id).lean().exec(function(err, data){
var len = data.survey_questions.length;
var counter = 0;
_.each(data.survey_questions, function(sq){
Question.findById(sq.question, function(err, q){
sq.question = q;
if(++counter == len) {
res.send(data);
}
});
});
});
这样,data
已经是一个普通的JS对象,您可以根据需要对其进行操作。
发布于 2013-01-24 23:03:27
我认为Mongoose文档对此不够清楚,但是查询中返回的数据(尽管您可以使用res.send() )实际上是一个Mongoose文档对象,而不是JSON对象。但是你可以用一行来解决这个问题...
Survey.findById(req.params.id, function(err, data){
var len = data.survey_questions.length;
var counter = 0;
var data = data.toJSON(); //turns it into JSON YAY!
_.each(data.survey_questions, function(sq){
Question.findById(sq.question, function(err, q){
sq.question = q;
if(++counter == len) {
res.send(data);
}
});
});
});
https://stackoverflow.com/questions/14504385
复制相似问题