2016-07-28 8 views
1

REST API(express.jsとmongodb)を使用していて、ドキュメントを更新しようとしていますが、動作していません。私は何が間違っているのかわからないが、誰かが私の前進に手伝ってくれるだろうか?express.jsで検索と更新クエリを書く方法は?

app.route('/articleupdation') 
     .post(article.updatearticle); 

コントローラー:ここでは、この

{ 
    "_id": { 
     "$oid": "5799995943d643600fabd6b7" 
    }, 
    "Username": "xx", 
    "Email": "[email protected]", 
    "Info": "Deactivate", 
    "Description": "aajdjdjddjdkjddjdjdhdj", 

} 

のように保存された

exports.updatearticle = function(req, res) { 

    Article.findOne({ 
        Username: 'xx', 
        Email: '[email protected]', 
        Info: 'Deactivate', 

       }, function(err, article) { 

        if (!err && article) { 

          article.Info = 'Active'; 

          article.save(function(err) { 

           if (err) { 

            console.log('not working'); 
           } else { 
            console.log('working'); 
           } 
          }); 

        } else { 
         console.log('Condtion not matched '); 
         console.log(err); 
        } 
       });  
    }; 

データ私がしようとしています何をされて私は私のルートとコントローラ

ルートを追加しましたアーチにイブ; Username, Email, Infoが一致する場合、私はarticle.Info = 'Active';を更新する必要がありますが、これは動作していません、誰かが私を助けてくれますか?

+0

あなたが直面しているエラーは何ですか:

このように、あなたのリファクタリング、コードは、このパターンをたどるだろうか?印刷条件が一致しないたびに – Rayon

+0

となります。私は自分のコードが正しくないことを知りません –

+0

'console.log(err);を試してください; – Rayon

答えて

0

見た目からは、あなたのクエリはコレクション内のどのドキュメントとも一致していないため、更新を行うステートメントブランチには到達せず、返された記事がnullであるだけです。あなたは、基になるコレクションにすなわち

db.articles.findOne({ 
    "Username": "xx", 
    "Email": "[email protected]", 
    "Info": "Deactivate" 
}) 

をモンゴシェルで生のクエリを実行することでこれをテストし、それが任意の一致する文書を返すかどうかを確認することができます。ない場合は、このクエリ

db.articles.findOne({ 
    "Username": "xx", 
    "Email": "[email protected]" 
}) 

サーバーに2つの要求(照会するすなわち、1つを必要としない、アトミックアップデートの中に、このことについてに行くための最善の方法で返された文書からInfoフィールドをチェックサーバーに変更を書き込むためのもの)は、findOneAndUpdate apiを使用することです。これにより、mongodb findAndModify updateコマンドが発行され、単一のドキュメントが変更されて返されます。デフォルトでは、返されたドキュメントには、更新に加えられた変更は含まれません。更新に加えられた変更を含む文書を返却するには、新しいオプションを使用します。

exports.updatearticle = function(req, res) { 
    Article.findOneAndUpdate(
     { "Username": req.body.username, "Email": req.body.email, "Info": "Deactivate" }, 
     { "$set": { "Info": "Active" } }, 
     { "new": true }, 
     function (err, doc) { 
      if (err) { // err: any errors that occurred 
       console.log(err); 
      } else { // doc: the document before updates are applied if `new: false` 
       console.log(doc); // , the document returned after updates if `new true` 
       console.log(doc.Info); 
      } 

     } 
    ); 
}; 
+1

ありがとうございました。 –

+1

最後のコードのfunction(err、doc)行の直前にカンマを1つ見逃しました。サンプル。 –

+0

@JosipFilipovićありがとうございました。 – chridam

関連する問題