示例JSON数据,向您展示我的MongoDB的排列方式:
{
"state" : "California"
"person" [{"name": "Bob"}, {"name": "Bill"}]
}
我的HTML中包含以下POST值name
和state
的输入表单:
<input type="text" name="state" />
<input type="text" name="name"/>
现在,为了处理这个POST,我的Node路由代码安排如下:
router.post('/profile', function(req, res, next) {
User.findOne({ _id: req.user._id }, function(err, user) {
if (err) return next(err);
/*first action*/
user.state = req.body.state;
/*second action*/
user.person.name = req.body.name;
user.save(function(err) {
if (err) return next(err);
req.flash('success', 'Purchase successful');
return res.redirect('/profile');
});
});
});
这是意味着要发生的事情。首先,在输入和提交state
后,状态(如我的数据库中所示)将更改为用户输入的内容。这按预期工作。
其次,在输入和提交name
后,应该在阵列中添加新的name
。
第二个动作不起作用。我尝试用push和for循环替换代码,如下所示:
for (var i = 0; i < user.person.length; i++){
user.push({
name: person[i].name
});
}
这没效果。我还要补充一点,这都是通过ejs呈现的。
答案 0 :(得分:1)
试
user.person.push({"name":req.body.name});
答案 1 :(得分:0)
问题是,user.person
是一个数组 - 因此您无法像name
那样访问user.person.name
- 如果您想添加新名称,那么您需要访问{{1}数组,然后推送新的person
- 这是你打算做的吗?在这种情况下 - 这是你应该做的:
req.body.name
尝试一下,让我知道这是否有帮助。