sql >> データベース >  >> NoSQL >> MongoDB

TypeError:callback.applyは関数ではありません(Node.js&Mongodb)

    mongodbのドキュメントを更新する方法は2つあります:

    1. ドキュメントを見つけてサーバーに持ち込み、変更してから、mongodbに保存し直します。

    2. mongodbにドキュメントを見つけて変更するように指示するだけです。最後に、mongodbが完了した後、結果/エラーをコールバックとして返します。

    コードでは、両方の方法を組み合わせています。

    1. user.save()を使用して、最初にuser.findOneでデータベースを検索し、それをserver(nodejs)にプルします。これで、データベースはコンピューターのメモリに保存されます。次に、データを手動で変更し、最後にuserを使用してmongodbに保存できます。 save()

      User.findOne({ userName: req.params.userName}, function(err, user) {
      
          if (err)
              res.send(err);
      
          //this user now lives in your memory, you can manually edit it
          user.username = "somename";
          user.competitorAnalysis.firstObservation = "somethingelse";
      
          // after you finish editing, you can save it to database or send it to client
           user.save(function(err) {
              if (err)
                  return res.send(err);
      
              return res.json({ message: 'User updated!' });
          });
      
    2. 2つ目は、User.findOneAndUpdate()を使用することです。これは、user.findOne()、次にuser.update()の代わりに使用することをお勧めします。基本的にデータベースを2回検索するからです。最初にfindOne()を検索し、もう一度検索してupdate()

    とにかく、2番目の方法は、最初にサーバーに移動せずにデータを更新するようにmongodbに指示することです。次に、mongodbがアクションを終了した後にのみ、更新されたファイル(またはエラー)をコールバックとして受け取ります

    User.findOneAndUpdate({ userName: req.params.userName}, 
                {
                 $set: { "competitorAnalysis.firstObservation" : req.body.firstObservation,
                          "competitorAnalysis.secondObservation" : req.body.secondObservation,
                          "competitorAnalysis.thirdObservation" : req.body.thirdObservation,
                          "competitorAnalysis.brandName" : req.body.brandName,
                          "competitorAnalysis.productCategory" : req.body.productCategory
                } },
                { upsert: true },
            function(err, user) {
            //after mongodb is done updating, you are receiving the updated file as callback    
    
            // now you can send the error or updated file to client
            if (err)
                res.send(err);
    
            return res.json({ message: 'User updated!' });
            });
    


    1. MongoDBを使用したリポジトリパターン-1つのトランザクションで複数の作業単位

    2. $ inc修飾子はmongodbの同時リクエストでどのように機能しますか?

    3. PyMongoトランザクションエラー:トランザクション番号は、レプリカセットメンバーまたはmongosでのみ許可されます

    4. 2つのコレクションとwhere句を使用したmongodb結合のようなクエリ