簡體   English   中英

貓鼬:在find()之后填充

[英]Mongoose: Populate after find()

我是mongo和node js的新手,這是我正在嘗試做的事情:

API將根據查詢檢查數據庫中是否存在現有條目。

  • (a)如果沒有現有文檔,則創建一個新文檔,填充,發送給客戶。
  • (b)如果文檔存在,則返回文檔,填充,發送給客戶。

問題:在方案(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM