MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

TypeError:callback.apply ist keine Funktion (Node.js &Mongodb)

Es gibt zwei Möglichkeiten, Dokumente in mongodb zu aktualisieren:

  1. Suchen Sie das Dokument, bringen Sie es zum Server, ändern Sie es und speichern Sie es dann wieder in Mongodb.

  2. Geben Sie einfach mongodb die Anweisung, das Dokument zu finden, es zu ändern; dann schließlich, nachdem mongodb fertig ist, das Ergebnis/den Fehler als Callback zurückgeben.

In Ihrem Code mischen Sie beide Methoden.

  1. Mit user.save() durchsuchen Sie zuerst die Datenbank mit user.findOne und ziehen sie auf den Server (nodejs), jetzt lebt sie in Ihrem Computerspeicher. Dann können Sie die Daten manuell ändern und schließlich mit dem Benutzer in Mongodb speichern. speichern()

    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. Die zweite ist die Verwendung von User.findOneAndUpdate(). Dies wird bevorzugt, anstatt user.findOne() dann user.update(); weil diese die Datenbank grundsätzlich zweimal durchsuchen. Suchen Sie zuerst nach findOne() und suchen Sie erneut nach update()

Wie auch immer, die zweite Methode weist Mongodb an, die Daten zu aktualisieren, ohne sie zuerst auf den Server zu bringen. Als Nächstes erhalten Sie die aktualisierte Datei (oder den Fehler) als Rückruf

, erst nachdem Mongodb mit seiner Aktion fertig ist
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!' });
        });