一尘不染

猫鼬-带有嵌入式文档的模型保存表格

node.js

将嵌入式阵列保存到Mongoose模型时遇到麻烦。

请参阅底部的编辑。

我有一种使用Mongoose在Express中创建BlogPost并将其存储在mongo中的数据的表单。我可以创建和查看新的博客文章,但是我只是在BlogPost模型中添加了嵌入式文档架构Feed,但无法获取Feed数组以将其从表单保存到模型中

码:

BlogPosts.js

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_database');

var Schema = mongoose.Schema
  , ObjectId = Schema.ObjectId;

var Feeds = new Schema({
    name      : { type: String }
  , key       : { type: String }
});

var BlogPost = new Schema({
    author    : ObjectId
  , title     : { type: String, required: true, index: { unique: true } }
  , date      : { type: Date, required: true, default: Date.now }
  , feeds     : [Feeds]
});

mongoose.model('BlogPost', BlogPost);

web.js

...
app.get('/blogpost/new', function(req, res) {
    res.render('blogposts/blogpost_new.jade', { locals: {
        title: 'New BlogPost'
    }
    });
});

app.post('/blogpost/new', function(req, res){
    var b = new BlogPost(req.body.b)
    b.save(function() {
      b.feeds.push();
      res.redirect('/blogposts');
    });
});
...
var BlogPost = mongoose.model('BlogPost', BlogPost);

翡翠形式

form( method="post")
  div
    div
      span Title :
      input(type="text", name="b[title]", id="editBlogPostTitle")
    div 
      span Feeds :
      ul 
        li 
          span name
          textarea( name="f[name]", rows=20, id="editBlogPostBodyName")
        li
          span key
          textarea( name="f[key]", rows=20, id="editBlogPostBodyKey")
    div#editBlogPostSubmit
      input(type="submit", value="Send")

如果我填写此表格,则模型会发布并保存,但供稿数据不存在("feeds" : [ ])。

如何正确提交提要数据以保存到阵列?

编辑

因此,我设法建立了一个表单来保存Feed对象,namekey在BlogPost中并在其中进行以下操作。但是,这仍然需要改进,以允许在创建单个BlogPost时保存多个Feed。使用当前的解决方案,我只能正确保存一个Feed。有什么想法吗?

blogposts.js(只需将Feed更改为Feed

var Feed = new Schema({
...

web.js(只是推动了推送)

app.post('/blogpost/new', function(req, res){
    var b = new BlogPost(req.body.b)
    b.feeds.push(req.body.feed);
    b.save(function() {
      res.redirect('/blogposts');
});

});

表格(只需更改Feed名称)

    li
        span name
        textarea( name="feed[name]", rows=20, id="editBlogPostBodyKey")
    li
        span key
        textarea( name="feed[key]", rows=20, id="editBlogPostBodyKey")

这样可以正确保存,在保存时我无法在一个博客文章中创建多个提要。任何帮助,不胜感激。谢谢。


阅读 181

收藏
2020-07-07

共1个答案

一尘不染

对于它的价值,我确实做到了这一点。请参阅上面的修改,一旦我将Feed名称添加[]到"feed[0][name]" and "feed[0][key]",然后进行了修改,该修改就会起作用"feed[1][name]" and "feed[1][key]"。感谢Chance的一些好主意。对我来说,将这种逻辑放在“获取”路线上是行不通的,它需要放在“职位”中。非常感谢。

2020-07-07