我正在使用表单和两个数据库集合,当提交表单时,输入元素中的所有数据都存储在相应的集合中。这很容易设置输入名称属性,如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()
函数相关联,但我想从表单本身进行。
如何从authors
向Blog
内的form
引用发送数据?我尝试将输入的名称设置为blogs[authors]
,但这不起作用,猜不是那么简单。
甚至可能吗?或者从路线推出唯一的选择?
提前致谢!
编辑:我被问到路线代码,所以这里是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>
答案 0 :(得分:0)
好吧,我最终可以解决它。看起来试图将某些内容直接保存到form
的集合引用中是错误的,我必须先将它存储在一个单独的变量中,如下所示:
var variableName = req.body.inputName;
然后循环遍历它将所有值推送到路径中的集合引用中,所以最终看起来像是从路线推送是唯一的选择。