用html表单工作mongo引用

时间:2017-11-10 16:53:13

标签: node.js mongodb forms express mongoose-schema

我正在使用表单和两个数据库集合,当提交表单时,输入元素中的所有数据都存储在相应的集合中。这很容易设置输入名称属性,如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()函数相关联,但我想从表单本身进行。

如何从authorsBlog内的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>  

1 个答案:

答案 0 :(得分:0)

好吧,我最终可以解决它。看起来试图将某些内容直接保存到form的集合引用中是错误的,我必须先将它存储在一个单独的变量中,如下所示:

var variableName = req.body.inputName; 

然后循环遍历它将所有值推送到路径中的集合引用中,所以最终看起来像是从路线推送是唯一的选择。