Mongoose:在find()之后填充

我是新来的mongo和节点js,这是我想要做的:

该API将根据查询来检查数据库中是否存在现有条目。

  • (a)如果没有现有文档,则创build一个新文档,填充,发送给客户端。
  • (b)如果文件存在,则返回文件,填充,发送给客户端。

问题:在情况(a)中,创build文档后,API向客户端发送“null”。

可疑: .populate()&.exec()在API完成创build新文档之前运行。 代码片段返回null:

console.log('Inside IF' + video_res); // returns null 

解决这个问题的最好方法是什么?

 model_video.findOne( video_entry, function(err, video_req) { // Send Back Object ID if (err) res.send(err); if (!video_req) { // Does not work console.log('-----STATUS : No Video Found'); model_video.create(video_entry, function(err, video_res) { console.log('Call back activated'); if (err) res.send(err); console.log('Response is ' + video_res); return video_res; // Does not work here! }); // Ends - Create console.log('Inside IF ' + video_res); } else { // Works console.log('-----STATUS : Video Found') if (err) return res.send(err); var video_res = video_req; console.log('Response is ' + video_res); return video_res; }; }) .populate('_chirps') .exec(function(err, video_res) { if (err) return res.send(err); res.json(video_res); console.log('Final Output is ' + video_res) }); }; 

非常感谢您的帮助!

callback函数exec()在你的.findOne查询后立即执行,你需要把你的代码的其余部分放在callback函数中。 我已经重构了你的代码,使它更加内联你正在做的事情。

 model_video.findOne(video_entry) .populate('_chirps') .exec(function(err, video_res) { if (err) return res.send(err); if (video_res) { console.log('-----STATUS : Video Found') console.log('Response is ' + video_res); res.json(video_res) } else { console.log('-----STATUS : No Video Found'); model_video.create(video_entry, function(err, new_video_res) { if (err) return res.send(err); console.log('Response is ' + new_video_res); res.json(new_video_res); }); } })