2017-05-31 23 views
2

マングースで文書を保存したり更新したりするには良い方法がありますか?私は後に以下の助けを保存または更新するマングース

let campaign = new Campaign({ 
     title: req.body.title, 
     market: req.body.market, 
     logo: req.body.logo, 
     additional_question_information: question, 
     status: status 
    }); 

campaign.saveOrUpdate().then(function() { ... } 

おかげだよ何のようなものはすべて

+0

あなたの質問は何ですか?あなたがしていることは正しいです。 – itsundefined

+1

申し訳ありませんが、私は全く明確ではありませんでした。 文書が存在しない場合は保存します。既存の文書を新しいデータで更新します。 マングースでそれを行う方法はありますか?それはいいと思われる – Ollie

+0

[Mongooseでドキュメントを更新/アップセットするにはどうすればいいですか?](https://stackoverflow.com/questions/7267102/how-do-i-update-upsert-a-document -in-mongoose?) –

答えて

3

私はあなたが「アップサート」と呼ばれて探しているものだと思います。

あなたはfindOneAndUpdateを使用し、{UPSERT:真}渡すことによってこれを行うことができ、オプションを以下の例のようなもの:

let campaign = new Campaign({ 
     title: req.body.title, 
     market: req.body.market, 
     logo: req.body.logo, 
     additional_question_information: question, 
     status: status 
    }); 

Campaign.findOneAndUpdate({ 
    _id: mongoose.Types.ObjectId('CAMPAIGN ID TO SEARCH FOR') 
}, campaign, { upsert: true }, function(err, res) { 
    // Deal with the response data/error 
}); 

をfindOneAndUpdateへの最初のパラメータは、あなたが保存しているかどうかを確認するために使用したクエリです新しい文書または既存の文書を更新する。変更した文書を応答データに戻す場合は、{ new: true }オプションを追加することもできます。 findOneAndUpdateはこちら

ドキュメント:http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate

+1

I .findOneAndUpdate呼び出し内のキャンペーンオブジェクトの周りの中括弧{}は実際には存在しないはずだと考えてください。 – StephenT

+0

良いキャッチ!答えを編集しました。 –

+0

ちょうど 'findOneAndUpdate'を実行しているFYIは' save'の周りを回転するミドルウェアを設定しません。リファレンス:http://mongoosejs.com/docs/middleware.html#notes – TheNastyOne

0

あなたはMongoDBののfindAndModify機能を使用することができます。 mongooseでは、これはfindOneAndUpdate()を呼び出すことでネイティブにサポートされています。ここにはそのドキュメントがあります。 http://mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate 第3引数では、オブジェクトがオプションとともに渡されるのを待っていることに注意してください。存在しない場合は、{ upsert : true }を使用して新しい文書を作成します。

関連する問題