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); }); } })