使用html表单工作mongo引用
我正在处理一个表单和两个数据库集合,当提交表单时,所有来自input元素的数据都存储在相应的集合中。 这很容易设置input名称属性,如blogs[content]
,然后在使用.create()
将数据发送到数据库的路由中使用该对象。
但是,当一个集合引用另一个时,我不知道该怎么做。
假设我有以下集合:
var Blog = new mongoose.Schema({ content: String, authors: [{ type: mongoose.Schema.Types.ObjectId, ref: "Author" }] }); var Author = new mongoose.Schema({ name: String });
我知道你可以直接从路由关联数据和push()
函数,但是我想从表单本身来完成。
我怎样才能发送数据给Blog
里的authors
参考从form
? 我尝试将input的名称设置为blogs[authors]
但这不起作用,猜测并不那么简单。
这甚至有可能吗? 或者是从路线推动唯一的select?
提前致谢!
编辑:我被要求的路线代码,所以在这里
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"); }); });
HTML表单应该是这样的:
<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>
那么,我可以最终解决它。 看起来这是一个错误,试图直接从form
保存某些东西到集合的引用中,我不得不首先将它存储在一个单独的variables中,如下所示:
var variableName = req.body.inputName;
然后循环通过它将所有的值从路由中推入集合的引用,所以最后看起来像从路由推送是唯一的select。