2017-11-10 1 views
2

Ich arbeite mit einem Formular und zwei Datenbanksammlungen. Wenn das Formular übergeben wird, werden alle Daten aus den Eingabeelementen in der entsprechenden Sammlung gespeichert. Dies ist ziemlich einfach zu tun, Eingabeattribute wie blogs[content] zu setzen und dann dieses Objekt in der Route zu verwenden, die die Daten mit .create() an die Datenbank sendet.Mongo-Referenzen mit HTML-Formularen bearbeiten

Ich habe jedoch keine Ahnung, wie dies zu tun ist, wenn eine Sammlung einen Verweis auf einen anderen hat.

Lassen Sie uns sagen, ich habe die folgenden Sammlungen:

var Blog = new mongoose.Schema({ 
    content: String, 
    authors: [{ 
     type: mongoose.Schema.Types.ObjectId, 
     ref: "Author" 
    }] 
}); 

var Author = new mongoose.Schema({ 
    name: String 
}); 

Ich weiß, dass Sie die Daten mit der push() Funktion direkt von den Routen verbinden kann, aber ich will es aus der Form selbst tun. Wie kann ich Daten an die authors Referenz in Blog von der form senden? Ich habe versucht, den Namen der Eingabe als blogs[authors], aber das funktioniert nicht, raten ist nicht so einfach.

Ist es überhaupt möglich? Oder ist das Schieben von den Routen die einzige Option?

Vielen Dank im Voraus!

EDIT: Ich wurde für die Routen-Code gefragt so ist es hier

app.get("/form", function(req, res){ 
    Author.find({}, function(err, authors) { 
     if(err) 
      console.log(err); 

     else 
      res.render("form.ejs", {authors: authors}); 
    }); 
}); 

// form.ejs sends a POST request to /blogs 

app.post("/blogs", function(req, res){ 
    Blog.create(req.body.blogs, function(err, newBlog){ 
     if(err) 
      console.log(err); 
     else 
      res.redirect("/form"); 
    }); 
}); 

Das HTML-Formular so etwas wie dies würde:

<form action="/blogs" method="POST"> 
    <select name=" HERE GOES THE name ATTRIBUTE I DON'T KNOW HOW TO SET "> 
     <option value="0" selected>Authors</option> 

     <% authors.forEach(function(author){ %> 
      <option value="<%= author._id %>"><%= author.name %></option> 
     <% }) %> 
    </select> 
</form> 

Antwort

0

Nun, ich es am Ende lösen konnte. Sieht aus wie es ein Fehler, zu versuchen, etwas zu sparen direkt in die Sammlung der Referenz vom form war, habe ich es zuerst wie diese in einer separaten Variable hatte zu speichern:

var variableName = req.body.inputName; 

Und dann Schleife durch sie alle Werte in den Schub die Referenz der Sammlung von der Route, so am Ende sieht aus wie Schieben von den Routen ist die einzige Option.