2017-08-23 1 views
0

Ich möchte eine Abstimmung App machen, ich habe ein Schema namens Poll. im Poll-Schema habe ich ein "Optionen" -Objekt. ich möchte die options.vote nach id aktualisieren. wie ich zu Poll (id) .options (id) .vote aufrufen? , dass mein Versuch:Mongoose Und mongodb findById mit Objekt in Objekt

app.post("/:id/:option_id", function(req, res){ 
    Poll.findById(req.params.id,function(err, poll){ 
     if(err){ 
      console.log("Vote(find the Poll) post err"); 
     } else{ 
      poll.options.findById(req.params.option_id,function(err,option){ 
       if(err){ 
        console.log("Vote(find the option) post err"); 
       } else{ 
       option.vote++; 
       option.vote.save(function(err){ 
        if(err){ 
        console.log("save vote error"); 
       } else{ 
        res.redirect("/:id/:option_id"); 
       } 
       }); 
      }}); 
     } 
+0

Sie wollen '.findOne()' als '.findById()' ist "strikt" eine Alias-Verknüpfung für '.findOne ({" _id ": id})'. Das ist alles, wofür es ist. Sie möchten etwas anderes, dann verwenden Sie stattdessen die vollständige Methode. –

Antwort

1

Sie können nicht poll.options.findById verwenden, da es Mungo Funktion und Umfrage ist, die Sie innerhalb von Callback bekommen und poll.option ist kein Poll Schema-Objekt. Was Sie versuchen könnten, ist: Ich gehe hier davon aus, dass Optionen ein Array mit einem Id-Feld und einem Vote-Feld ist. So können Sie versuchen, wie:

var _ = require('lodash'); 

Poll.findById(req.params.id,function(err, poll){ 
    if(err){ 
     console.log("Vote(find the Poll) post err"); 
    } else{ 
     var options = poll.options; 
     var optionIndex = _.findIndex(options,["id", req.params.option_id]) 
     poll.options[optionIndex].vote ++; 
     poll.save(function(err)){ 
      if(err){ 
       console.log("save vote error"); 
      } else{ 
       res.redirect("/:id/:option_id"); 
      } 

     } 
    } 
}); 

EDIT: Lodash eine einfache Bibliothek, die einige Array Manipulationsmethoden geschrieben für die Nutzung hat.

+0

danke, also zuerst finden Sie bei id die Umfrage, nach finden Sie den Index der Option erhöhen die Stimme, und speichern. und meine Frage: was sein "lodash" (es gibt mir einen Fehler "Kann das Modul 'lodash' nicht finden"). Ich google es und wenig verstehe nicht –

+0

Sie müssen lodash Modul installieren, indem Sie Befehl npm installieren lodash --save @NaorMalca. Überprüfen Sie die bearbeitete Antwort für weitere Informationen –