MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

TypeError:callback.apply nie jest funkcją (Node.js i Mongodb)

Istnieją 2 sposoby aktualizowania dokumentów w mongodb:

  1. znajdź dokument, przynieś go na serwer, zmień go, a następnie zapisz z powrotem w mongodb.

  2. po prostu wydaj polecenie mongodb, aby znalazł dokument, zmień go; następnie po zakończeniu mongodb zwróć wynik/błąd jako wywołanie zwrotne.

W swoim kodzie mieszasz obie metody.

  1. za pomocą user.save() najpierw przeszukujesz bazę danych za pomocą user.findOne i ściągasz ją na serwer (nodejs), teraz żyje w pamięci twojego komputera. Następnie możesz ręcznie zmienić dane i ostatecznie zapisać je w mongodb za pomocą user. zapisz()

    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. drugi to użycie User.findOneAndUpdate(). Jest to preferowane zamiast user.findOne(), a następnie user.update(); ponieważ w zasadzie przeszukują bazę dwa razy. najpierw findOne() i ponownie wyszukaj update()

W każdym razie, drugą metodą jest nakazanie mongodb aktualizacji danych bez uprzedniego przeniesienia ich na serwer. Następnie, dopiero po zakończeniu akcji przez mongodb, otrzymasz zaktualizowany plik (lub błąd) jako wywołanie zwrotne

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. Element tablicy aktualizacji dokumentów MongoDB przy użyciu metody findOneAndUpdate w Javie

  2. aktualizacjaWiele na podstawie innej dziedziny w mongodb

  3. sailsjs nadal używa domyślnej bazy danych po zmianie na mongodb

  4. Instalowanie modułu play framework mongodb morphia

  5. nie można użyć części (...) do przechodzenia przez element