2017-12-15 24 views
0

mongo db.Iを使用してノードjsアプリケーションで作業しています。res.json部分にスタックされています。キーワードの結果が更新される前に表示されます。ユーザーがキーワードを入力すると結果としてjsonに表示されますが、キーワードはres.jsonに表示され、mongodbキーワードは正常に更新されます。私は間違っていますか?mongodbで更新後の結果を取得するには?

app.post('/keyword', isLoggedIn, function (req, res) { 
       User.update({_id:req.user._id},{$addToSet:{keyword:req.body.tags}},function (err, result) { 
        if (err) return handleError(err); 

        return true; 
        }); 
        console.log(w); 
        res.json({user:req.user}) 

     }) 

は考え私が持っている、その後、キーワードのアレイにすでに「LIO」とi「はリンゴ」を入力すると、それは、両方の結果を表示する必要がありますが、それは両方のキーワードを表示するページのリロード後にのみkeyword.And LIOが表示されます。

答えて

0

あなたは間違ったやり方をしています。 JavaScriptはの非同期言語です。あなたの場合、関数は応答を待たずにデータを返しています。基本的には、更新機能が実行される前にデータが返されます。これを解決するには、更新機能内でのみユーザーデータを返します。

app.post('/keyword', isLoggedIn, function (req, res) { 
    User.findOneAndUpdate({_id:req.user._id},{$addToSet: 
     {keyword:req.body.tags}, {returnNewDocument: true}},(err, result) => { 
     if (err) return handleError(err); 

     return res.json({user:user, result:result, flag: 1}); 
    }); 
}); 

フラグ変数を送信して、値が正しく更新されているかどうかを確認できます。

+0

私のソリューションを更新しました。{new:true} .Btwに参考になりました。 – Nitin

+0

{returnNewDocument:true}がmongo db 3.6バージョンに追加されました。 – Nikhil

0

次のコードは、user._idの値を条件として使用して、タグの配列を1つの一致するドキュメントにプッシュしようとします。

User.findOneAndUpdate(

    // <filter> 
    {_id:req.user._id}, 

    // <update> 
    {$push:{keyword: {$each: req.body.tags}}}, 

    // <options> 
    {returnNewDocument: true} // Optional, depending on if you want the updated doc. 

    // Callback 
    function callback(err, doc, raw) { 
     // Evaluate callback code... 
     res.json({user:req.user}) 
    } 
); 

各引数の詳細については、findOneAndUpdateのマニュアルを参照してください。

+0

いいえこれをデータベースで更新する必要があります。他の情報のために後で使用できるユーザーのキーワードを管理することができます – Nitin

+0

したがって、リクエストで送信されたタグをデータベースのそのユーザーのタグ配列にプッシュしますか? –

+0

はい。あのタグは後でできます。 – Nitin

関連する問題