2017-07-20 21 views
0

csv_filesのcsv文字列を格納するための配列フィールドを含むマングースモデルがあります。別のウェブアプリケーションからfetch APIリクエストを送信して、特定のPostのcsv文字列をPOSTします。マングース - バージョンエラー:一致するドキュメントが見つかりません

以下のコードはエラーに

UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): VersionError: No matching document found for id "5966932399e969ad8013bedf"

router.js

router.post('/posts/:url/upload-csv/:csv_name', (req, res) => { 
    let csv_name = req.params.csv_name; 
    let csv_string = csv_name+req.body.csv_string; 

    Post.findOne({url: req.params.url}) 
    .then((post) => { 
     if (post.csv_files.length === 0) { 
     post.csv_files.push(csv_string); 
     } else { 
     let foundExistingCSV = false; 
     for (var i = 0; i < post.csv_files.length; i++) { 
      if (post.csv_files[i].includes(csv_name)) { 
      foundExistingCSV = true; 
      post.csv_files[i] = csv_string; 
      break; 
      } 
     } 
     if (!foundExistingCSV) post.csv_files.push(csv_string); 
     } 

     post.markModified('csv_files'); 
     post.save(); 

     return res.status(200); 
    }) 
    .catch((err) => { 
     console.log(err); 
     return res.status(400); 
    }); 
}); 

モデル/ post.js

const mongoose = require('mongoose'); 

var stringPreset = { 
    type: String, 
    uppercase: true 
} 

var Post = mongoose.model('Post', { 
    name     : stringPreset, 
    url     : String, 
    password    : String, 
    csv_files   : { type : Array , "default" : [] }, 
    updatedAt   : { type: Date, default: Date.now } 
}); 

module.exports = { Post }; 

を生成し、私はこの問題を解決するにはどうすればよいように文書はtに保存されます彼csv_filesアレイエラーはありませんか?

+1

複数のリクエストによって同じドキュメントが(ほぼ)同時に処理される可能性はありますか? – robertklep

答えて

0

@robertklepのように見えます。 Promiseに最初のAPI呼び出しをラップし、最初のAPI呼び出しが完了した後に2番目のAPI呼び出しを実行することで問題を解決しました。

誰かがより良い解決策を見つけた場合に備えて、これを答えとしてマークするのを待つつもりです。

関連する問題