【发布时间】:2017-11-12 02:52:18
【问题描述】:
我正在使用一个表单和两个数据库集合,当表单提交时,来自输入元素的所有数据都存储在相应的集合中。这很容易设置像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() 函数关联,但我想从表单本身进行。
如何从form 向Blog 内的authors 引用发送数据?我尝试将输入的名称设置为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>
【问题讨论】:
标签: node.js mongodb forms express mongoose-schema