[英]Mongoose: Populate after find()
我是mongo和node js的新手,這是我正在嘗試做的事情:
API將根據查詢檢查數據庫中是否存在現有條目。
問題:在方案(a)中,在創建文檔之后,API向客戶端發送“null”。
懷疑: .populate()和.exec()在API完成創建新文檔之前運行。 代碼中的代碼段返回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)
});
};
非常感謝您的幫助!
回調exec()回調在.findOne查詢后立即執行,您需要將其余代碼放在該回調中。 我重構了你的代碼,使它更符合你想要做的事情。
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);
});
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.