我正在使用一个表单和两个数据库集合,当提交表单时,来自输入元素的所有数据都存储在相应的集合中。设置输入名称属性(如 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>
最佳答案
好吧,我最终可以解决它。从 form
中尝试将某些内容直接保存到集合的引用中似乎是一个错误,我必须首先将其存储在一个单独的变量中,如下所示:
var variableName = req.body.inputName;
然后遍历它,将所有值从路由推送到集合的引用中,所以最后看起来从路由推送是唯一的选择。
关于node.js - 使用 html 表单工作 mongo 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47227646/