sql >> Database teknologi >  >> NoSQL >> MongoDB

TypeError:callback.apply er ikke en funktion (Node.js &Mongodb)

Der er 2 måder at opdatere dokumenter på i mongodb:

  1. find dokumentet, bring det til serveren, skift det, og gem det derefter tilbage til mongodb.

  2. bare giv instruktion til mongodb for at finde dokument, ændre det; så til sidst efter mongodb er færdig, returner resultatet/fejlen som tilbagekald.

I din kode blander du begge metoder.

  1. med user.save(), først søger du i databasen med user.findOne, og trækker den til server(nodejs), nu bor den i din computers hukommelse. derefter kan du manuelt ændre dataene og til sidst gemme dem til mongodb med bruger. gem()

    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. den anden er at bruge User.findOneAndUpdate().. Dette foretrækkes i stedet for user.findOne() og derefter user.update(); fordi de grundlæggende søger i databasen to gange. først for at findeOne(), og søg igen for at opdatere()

Anyway, den anden metode fortæller mongodb at opdatere dataene uden først at bringe dem til serveren. Dernæst, først efter at mongodb er færdig med sin handling, vil du modtage den opdaterede fil (eller fejl) som tilbagekald

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. 3 måder at skjule et indeks fra forespørgselsplanen i MongoDB

  2. Konfiguration af redis til konsekvent at fjerne ældre data først

  3. Får indstillingen slave-read-only nej til at få slave til at bekræfte hvert hash-opslag med masteren?

  4. Hvordan $skubber man et felt afhængigt af en betingelse?