0

I have a little problem to understand what to do here. I am learning nodejs and mongodb/mongoose. Only to learn, I am building a little page to update documents in my db. First of all, I choose two teams from a select, then I insert data from input and then I want to save them in the db. On the front-end, my controller is like this:

 FootballNumbers.controller('teamController', function($scope, $route, $routeParams, $http){

 $http.get('/api/teams').then(function(response){
        $scope.teams = response.data;
        console.log(response.data);
    });

 $scope.aggiornaDB = function(squadra1,squadra2){
        console.log(squadra1);
        console.log(squadra2);
        for(i=0; i<$scope.teams.length; i++){
            for (j=0; j<$scope.teams.length;j++){
                if($scope.teams[i].Nome==squadra1){
                    if($scope.teams[j].Nome==squadra2){
                        console.log($scope.teams[i].Nome);
                        console.log($scope.teams[j].Nome);

                        var Classifica = $scope.Classifica;
                        var ClassificaCasa = $scope.ClassificaCasa;
                        var ClassificaTrasferta = $scope.ClassificaTrasferta;

                        var Classifica2 = $scope.Classifica2;
                        var ClassificaCasa2 = $scope.ClassificaCasa2;
                        var ClassificaTrasferta2 = $scope.ClassificaTrasferta2

                        var Forma = $scope.Forma;
                        var Forma2 = $scope.Forma2;

                        var PartiteGiocate = $scope.teams[i].PartiteGiocate + 1;
                        var PartiteGiocateCasa = $scope.teams[i].GiocateCasa + 1;

                        var PartiteGiocate2 = $scope.teams[j].PartiteGiocate + 1;
                        var PartiteGiocateTrasferta = $scope.teams[j].GiocateTrasferta + 1;

                        var Vinte = $scope.teams[i].Vinte;

                        var VinteCasa = $scope.teams[i].VinteCasa;

                        var Perse2 = $scope.teams[j].Perse ;
                        var PerseTrasferta= $scope.teams[j].PerseTrasferta ;

                        var Pareggiate = $scope.teams[i].Pareggiate ;
                        var PareggiateCasa = $scope.teams[i].PareggiateCasa ;
                        var Pareggiate2 = $scope.teams[j].Pareggiate ;
                        var PareggiateTrasferta = $scope.teams[j].PareggiateTrasferta ;

                        var Perse = $scope.teams[i].Perse ;
                            var PerseCasa = $scope.teams[i].PerseCasa ;
                            var Vinte2 = $scope.teams[j].Vinte ;
                            var VinteTrasferta = $scope.teams[j].VinteTrasferta ;

                        if($scope.GolCasa > $scope.GolTrasferta){
                             Vinte = $scope.teams[i].Vinte + 1;
                            VinteCasa = $scope.teams[i].VinteCasa + 1; 
                             Perse2 = $scope.teams[j].Perse + 1;
                             PerseTrasferta= $scope.teams[j].PerseTrasferta + 1;
                        }
                        else if($scope.GolCasa == $scope.GolTrasferta){
                             Pareggiate = $scope.teams[i].Pareggiate + 1;
                            PareggiateCasa = $scope.teams[i].PareggiateCasa + 1;
                            Pareggiate2 = $scope.teams[j].Pareggiate + 1;
                            PareggiateTrasferta = $scope.teams[j].PareggiateTrasferta + 1;
                        }
                        else {
                            Perse = $scope.teams[i].Perse + 1 ;
                            PerseCasa = $scope.teams[i].PerseCasa + 1 ;
                            Vinte2 = $scope.teams[j].Vinte + 1;
                            VinteTrasferta = $scope.teams[j].VinteTrasferta + 1;
                        }

                        var SommaGol = $scope.GolCasa + $scope.GolTrasferta;

                        var MediaGol = (($scope.teams[i].MediaGol * $scope.teams[i].PartiteGiocate) + SommaGol)/ PartiteGiocate;
                        var MediaGol2 = (($scope.teams[j].MediaGol * $scope.teams[j].PartiteGiocate) + SommaGol)/ PartiteGiocate2;

                        var Over1 = $scope.teams[i].Over1 ;
                            var Over1Casa = $scope.teams[i].Over1Casa ;
                            var Over1T= $scope.teams[j].Over1 ;
                            var Over1Trasferta = $scope.teams[j].Over1Trasferta ;

                        if(SommaGol>1){
                            Over1 = $scope.teams[i].Over1 + 1;
                            Over1Casa = $scope.teams[i].Over1Casa + 1;
                             Over1T= $scope.teams[j].Over1 + 1;
                            Over1Trasferta = $scope.teams[j].Over1Trasferta + 1;
                        } 

                        var Over2 = $scope.teams[i].Over2;
                            var Over2Casa = $scope.teams[i].Over2Casa;
                            var Over2T= $scope.teams[j].Over2;
                            var Over2Trasferta = $scope.teams[j].Over2Trasferta;

                        if(SommaGol>2){
                            Over2 = $scope.teams[i].Over2 + 1;
                            Over2Casa = $scope.teams[i].Over2Casa + 1;
                            Over2T= $scope.teams[j].Over2 + 1;
                            Over2Trasferta = $scope.teams[j].Over2Trasferta + 1;
                        }

                            var GolSegnati = $scope.teams[i].GolSegnati ;
                            var GolSegnatiCasa = $scope.teams[i].GolSegnatiCasa ;
                            var GolSubitiTrasferta = $scope.teams[j].GolSubitiTrasferta ;
                            var GolSubiti2 = $scope.teams[j].GolSubiti ;

                        if ($scope.GolCasa>0){
                             GolSegnati = $scope.teams[i].GolSegnati + 1;
                            GolSegnatiCasa = $scope.teams[i].GolSegnatiCasa + 1;
                            GolSubitiTrasferta = $scope.teams[j].GolSubitiTrasferta + 1;
                            GolSubiti2 = $scope.teams[j].GolSubiti + 1;
                        }

                            var GolSubiti = $scope.teams[i].GolSubiti ;
                            var GolSubitiCasa = $scope.teams[i].GolSubitiCasa ;
                            var GolSegnatiTrasferta = $scope.teams[j].GolSegnatiTrasferta;
                            var GolSegnati2 = $scope.teams[j].GolSegnati ;

                        if ($scope.GolTrasferta>0){
                             GolSubiti = $scope.teams[i].GolSubiti + 1;
                             GolSubitiCasa = $scope.teams[i].GolSubitiCasa + 1;
                             GolSegnatiTrasferta = $scope.teams[j].GolSegnatiTrasferta + 1;
                             GolSegnati2 = $scope.teams[j].GolSegnati + 1;
                        }

                     }
                }
$http.put('/api/teams/update/' + $scope.teams[i]._id, {
    params: {
        'Classifica': Classifica,
        'ClassificaCasa': ClassificaCasa,
        'ClassificaTrasferta': ClassificaTrasferta,
        "Forma": Forma,
        "PartiteGiocate": PartiteGiocate,
        "PartiteGiocateCasa": PartiteGiocateCasa,
        "VinteCasa": VinteCasa,
        "Vinte": Vinte,
        "Pareggiate": Pareggiate,
        "PareggiateCasa": Pareggiate,
        "Perse": Perse,
        "PerseCasa": PerseCasa,
        "MediaGol": MediaGol,
        "Over1": Over1,
        "Over1Casa": Over1Casa,
        "Over2": Over2,
        "Over2Casa": Over2Casa,
        "GolSegnati": GolSegnati,
        "GolSegnatiCasa": GolSegnatiCasa,
        "GolSubiti": GolSubiti,
        "GolSubitiCasa": GolSubitiCasa
      }
     });

    $http.put('/api/teams/update2/' + $scope.teams[j]._id, {
        params: {
            'Classifica2': Classifica2,
            'ClassificaCasa2': ClassificaCasa2,
            'ClassificaTrasferta2': ClassificaTrasferta2,
            "Forma2": Forma2,
            "PartiteGiocate2": PartiteGiocate2,
            "PartiteGiocateTrasferta": PartiteGiocateTrasferta,
            "VinteTrasferta": VinteTrasferta,
            "Vinte2": Vinte2,
            "Pareggiate2": Pareggiate2,
            "PareggiateTrasferta": PareggiateTrasferta,
            "Perse2": Perse2,
            "PerseTrasferta": PerseTrasferta,
            "MediaGol2": MediaGol2,
            "Over1T": Over1T,
            "Over1Trasferta": Over1Trasferta,
            "Over2T": Over2T,
            "Over2Trasferta": Over2Trasferta,
            "GolSegnati2": GolSegnati2,
            "GolSegnatiTrasferta": GolSegnatiTrasferta,
            "GolSubiti2": GolSubiti2,
            "GolSubitiTrasferta": GolSubitiTrasferta
        }
    })
    .then(function () {
        alert('Teams updated')
    })

            }
        }
       }


       });

I want to update two documents with the same function, but I don't understand how my backend mongoose method PUT has to be. I read about it, but I found nothing that seems to help me in a situation like this. Thank you for your help.

My collection is called "Teams", I didn't create any Schema because my DB was already filled, and this is my backend:

       var express = require('express');
     var bodyParser = require('body-parser');
     var app = express();
     var mongoose = require('mongoose');

  mongoose.connect('mongodb://localhost:27017/FootballNumbers', function(err){
   if(err)
    console.log(err);
   else
    console.log("db connected")
  });

  var connection = mongoose.connection;




    app.use(bodyParser.urlencoded({extended: true}));
    app.use(bodyParser.json());
   app.use(express.static(__dirname + '/client'));

    app.get('/api/teams', function(req, res){
   connection.db.collection("Teams", function(err, collection){
      collection.find({}).toArray(function(err, data){
         res.json(data);
       })

   });

 });


  /* UPDATE team*/
                 app.put('/api/teams/update/:_id', function(req, res, next) 
         {
    connection.db.collection("Teams", function(err, collection){
    collection.findOneAndUpdate({ "_id": req.params._id }, { "$set": { 
   "Classifica" : req.params.Classifica, 
    "ClassificaCasa":req.params.ClassificaCasa,
    "ClassificaTrasferta":req.params.ClassificaTrasferta,
    "PartiteGiocate": req.params.PartiteGiocate,
    "GiocateCasa": req.params.PartiteGiocateCasa,
    "Vinte": req.params.Vinte,
    "Pareggiate": req.params.Pareggiate,
    "Perse": req.params.Perse,
    "VinteCasa": req.params.VinteCasa,
    "PareggiateCasa": req.params.PareggiateCasa,
    "PerseCasa": req.params.PerseCasa,
    "Forma": req.params.Forma,
    "MediaGol": req.params.MediaGol,
    "Over1": req.params.Over1,
    "Over2": req.params.Over2,
    "Over1Casa": req.params.Over1Casa,
    "Over2Casa": req.params.Over2Casa,
    "GolSegnati": req.params.GolSegnati,
    "GolSegnatiCasa": req.params.GolSegnatiCasa,
    "GolSubiti": req.params.GolSubiti,
    "GolSubitiCasa": req.params.GolSubitiCasa}}).exec(function(err, teams){
    if(err) {
     console.log(err);
    res.status(500).send(err);
 } else {
    res.status(200).send(teams);
    }
   });
  });
   });




  app.put('/api/teams/update2/:_id', function(req, res, next) {
connection.db.collection("Teams", function(err, collection){
    collection.findOneAndUpdate({ "_id": req.params._id2 }, { "$set": { "Classifica" : req.params.Classifica2, 
        "ClassificaCasa":req.params.ClassificaCasa2,
        "ClassificaTrasferta":req.params.ClassificaTrasferta2,
        "PartiteGiocate": req.params.PartiteGiocate2,
        "GiocateTrasferta": req.params.PartiteGiocateTrasferta,
        "Vinte": req.params.Vinte2,
        "Pareggiate": req.params.Pareggiate2,
        "Perse": req.params.Perse2,
        "VinteTrasferta": req.params.VinteTrasferta,
        "PareggiateTrasferta": req.params.PareggiateTrasferta,
        "PerseTrasferta": req.params.PerseTrasferta,
        "Forma": req.params.Forma2,
        "MediaGol": req.params.MediaGol2,
        "Over1": req.params.Over1T,
        "Over2": req.params.Over2T,
        "Over1Trasferta": req.params.Over1Trasferta,
        "Over2Trasferta": req.params.Over2Trasferta,
        "GolSegnati": req.params.GolSegnati2,
        "GolSegnatiTrasferta": req.params.GolSegnatiTrasferta,
        "GolSubiti": req.params.GolSubiti2,
        "GolSubitiTrasferta": req.params.GolSubitiTrasferta}}).exec(function(err, teams){
     if(err) {
   console.log(err);
   res.status(500).send(err);
    } else {
        res.status(200).send(teams);
  }
 });
 });
 });


   app.listen(3000, function(){
   console.log('server is running');
  });

The console shows me these errors:

angular.js:12587 PUT http://localhost:3000/api/teams/update/597111124fcd87eb03d2122d 500 (Internal Server Error) for both the put methods

And in the terminal i got this error: Cannot read the property 'findOneAndUpdate'of undefined

1

1 Answer 1

1

Firstly it expects the url to be following: http://localhost:3000/api/teams/update/259710fc44fcd87eb03d2120f http://localhost:3000/api/update2/259710fc44fcd87eb03d2120f

Respectively.

"PareggiateTrasferta": req.params,
PareggiateTrasferta,

plus this is an invalid statement.

Sign up to request clarification or add additional context in comments.

9 Comments

yes, now the url is correct, but the error is the same (i edited with the new error), and i fixed that statement but nothing changed
can u share the complete code, with reference to "app" variable.
ok edited with the full code on the backend and all the controller in the frontend
try removing "next" from the arguments
angular.js:12587 PUT localhost:3000/api/teams/update/597111124fcd87eb03d2122d 500 (Internal Server Error) for both the put methods And in the terminal i got this error: Cannot read the property 'findOneAndUpdate'of undefined this is the error, and nothing change removing "next"
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.