将嵌入式阵列保存到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" : [ ])。
"feeds" : [ ]
如何正确提交提要数据以保存到阵列?
编辑
因此,我设法建立了一个表单来保存Feed对象,name并key在BlogPost中并在其中进行以下操作。但是,这仍然需要改进,以允许在创建单个BlogPost时保存多个Feed。使用当前的解决方案,我只能正确保存一个Feed。有什么想法吗?
name
key
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")
这样可以正确保存,在保存时我无法在一个博客文章中创建多个提要。任何帮助,不胜感激。谢谢。
对于它的价值,我确实做到了这一点。请参阅上面的修改,一旦我将Feed名称添加[]到"feed[0][name]" and "feed[0][key]",然后进行了修改,该修改就会起作用"feed[1][name]" and "feed[1][key]"。感谢Chance的一些好主意。对我来说,将这种逻辑放在“获取”路线上是行不通的,它需要放在“职位”中。非常感谢。
"feed[0][name]" and "feed[0][key]"
"feed[1][name]" and "feed[1][key]"