sql >> Database >  >> NoSQL >> MongoDB

TypeError:callback.apply is geen functie (Node.js &Mongodb)

Er zijn 2 manieren om documenten in mongodb bij te werken:

  1. zoek het document, breng het naar de server, wijzig het en sla het weer op in mongodb.

  2. geef gewoon instructie aan mongodb om het document te vinden, verander het; en tenslotte, nadat Mongodb klaar is, retourneer je het resultaat/de fout als callback.

In je code mix je beide methoden.

  1. met user.save(), zoek je eerst in de database met user.findOne, en trek je het naar server(nodejs), nu leeft het in je computergeheugen. Daarna kun je de gegevens handmatig wijzigen en uiteindelijk opslaan in mongodb met gebruiker. opslaan()

    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. de tweede is om User.findOneAndUpdate() te gebruiken. Dit heeft de voorkeur, in plaats van user.findOne() dan user.update(); omdat degenen die de database in feite twee keer doorzoeken. eerst naar findOne(), en zoek opnieuw om te updaten()

Hoe dan ook, de tweede methode vertelt mongodb om de gegevens bij te werken zonder eerst naar de server te brengen. Vervolgens, pas nadat mongodb klaar is met zijn actie, ontvangt u het bijgewerkte bestand (of fout) als callback

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 join-achtige query met twee collecties en een where-clausule

  2. Hoe u de dag, maand en jaar van een datum in SQL kunt krijgen

  3. retourneer slechts één eigenschap _id

  4. mongo db (mongodb.service) mislukt, status 14