2017-11-10 7 views
2

私はフォームと2つのデータベースコレクションを扱っています。フォームが送信されると、入力要素のすべてのデータが対応するコレクションに格納されます。 blogs[content]のような入力名属性を設定し、.create()でデータベースにデータを送信するルートでそのオブジェクトを使用するのはかなり簡単です。htmlフォームによるmongoの参照の扱い

ただし、コレクションに別のコレクションへの参照がある場合、これを行う方法はわかりません。私はあなたがまっすぐルートからpush()機能付きのデータを関連付けることができます知っている

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

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

を、私はフォーム自体からそれをやりたい:

のは、私は次のコレクションを持っているとしましょう。

formからBlogの中にあるauthorsの参照にデータを送信するにはどうすればよいですか?私はblogs[authors]として入力の名前を設定しようとしましたが、それは動作しません、推測は簡単ではありません。

それは可能ですか?または、ルートから唯一のオプションを選択していますか?

ありがとうございます!

EDIT:

<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> 

答えて

0

まあ、私は最後にそれを解決することができます:私は、それがHTMLフォームはこのようなものになるだろう

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"); 
    }); 
}); 

であるので、ここでのルートコードを求めました。それは間違いが直接formからコレクションの参照に何かを保存しようとしていたように、私が最初にこのような別の変数に格納しなければならなかったルックス:

var variableName = req.body.inputName; 

そして、それはにすべての値を押してループルートからのコレクションの参照、最終的にルートからのプッシュのように見えるだけのオプションです。

関連する問題