簡體   English   中英

POST之前如何檢查數據庫中是否已存在文檔-MongoDB,NodeJS

[英]How to check for document already in database before POST - MongoDB, NodeJS

我試圖在發布之前檢查數據庫中是否已經有文檔。 我通過jQuery.post()方法發布到我的api /歌曲端點。

我要檢查的是查看歌曲是否已在數據庫中。 我可以通過查詢要推送到數據庫的songId參數來進行檢查。 如果歌曲已經存在於數據庫中,我想將數字增加1。

我一直在嘗試使用mongo的findOne(),但是我無法在POST中使用它。 我的張貼路線如下:

router.post('/api/songs', function(req, res){

    if(Song.findOne({songId: req.body.songId}).length > -1){
        console.log('already in there fam')
    } else{
    var song = new Song();

    song.artistName = req.body.artistName;
    song.titleName = req.body.titleName;
    song.songId = req.body.songId;
    song.songImg = req.body.songImg;


    song.save(function(err) {
        if (err) {
            console.log("Error: " + err)
        } else {
            console.log("created fam")
        }
    })

    };
    console.log(song);
    return res.json({message: "SongCreated"})

})

我的問題是我無法弄清楚findOne返回什么。 我希望它返回一個布爾值,所以我嘗試了count()length()但無法使其返回true。 無論如何, req發布到數據庫。

有任何想法嗎?

node.js中的所有I / O操作都是異步的。 您的Song.findOne操作也是異步的。 您應該等待它通過回調功能完成,然后檢查其結果。

貓鼬的findOne方法返回一個Promise。 您可以在此處閱讀更多信息。

承諾執行示例:

var query = Song.findOne({songId: req.body.songId})
query.exec(function(err, song) {

})

嘗試以下代碼:

 router.post('/api/songs', function(req, res){
    Song.findOne({songId: req.body.songId}, function(err, song){
        if (err) {
            return console.log("Error: " + err)
        }
        if(song){
            return console.log('already in there fam')
        }
        var song = new Song();

        song.artistName = req.body.artistName;
        song.titleName = req.body.titleName;
        song.songId = req.body.songId;
        song.songImg = req.body.songImg;


        song.save(function(err) {
          if (err) {
            console.log("Error: " + err)
          } else {
            console.log("created fam")
          }
        })

        console.log(song);
        return res.json({message: "SongCreated"})
    })
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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