MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

TypeError:callback.apply не е функция (Node.js &Mongodb)

Има 2 начина за актуализиране на документи в mongodb:

  1. намерете документа, пренесете го на сървъра, променете го, след което го запазете обратно в mongodb.

  2. просто дайте инструкция на mongodb да намери документ, да го промени; след това накрая, след като mongodb приключи, върнете резултата/грешката като обратно извикване.

Във вашия код вие смесвате и двата метода.

  1. с user.save(), първо търсите в базата данни с user.findOne и я изтегляте на сървър (nodejs), сега тя живее в паметта на вашия компютър. след това можете ръчно да промените данните и накрая да ги запишете в mongodb с user. 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. второто е да използвате User.findOneAndUpdate().. Това е за предпочитане, вместо user.findOne(), след това user.update(); тъй като тези основно търсят базата данни два пъти. първо за findOne() и потърсете отново за update()

Както и да е, вторият метод казва на 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Мога ли да променя съществуващ индекс в MongoDB, без да го пускам?

  2. Mongoose:Премахване на обект от масив въз основа на ID (грешка в предаването)

  3. Пълнотекстово търсене с Meteor.js и MongoDB

  4. Преброяване на различни полета на поддокумент и извеждане като именувани ключове

  5. MongoDB не е оторизиран за заявка - код 13