Node.js 使用嵌套模式在Mongoose中创建子文档
我有一个包含嵌套模式的用户模式——总体上有三层。我对增加民意调查没有问题,但不能为我的生活增加投入。我曾尝试让一个用户处理数据,如常规的Node.js 使用嵌套模式在Mongoose中创建子文档,node.js,mongodb,mongoose,mongoose-schema,Node.js,Mongodb,Mongoose,Mongoose Schema,我有一个包含嵌套模式的用户模式——总体上有三层。我对增加民意调查没有问题,但不能为我的生活增加投入。我曾尝试让一个用户处理数据,如常规的json(例如获取轮询数组的索引,然后推送到嵌套的输入数组)。我尝试创建一个新的输入并将其推送到输入数组 以下代码非常适合在给定用户上创建新轮询: const poll = user.polls.create({}); user.polls.push(poll); user.save(function(err, data) { //more stuff h
json
(例如获取轮询数组的索引,然后推送到嵌套的输入数组)。我尝试创建一个新的输入并将其推送到输入数组
以下代码非常适合在给定用户上创建新轮询:
const poll = user.polls.create({});
user.polls.push(poll);
user.save(function(err, data) {
//more stuff here
})
但是,当我在民意测验中尝试相同的方法时,我无法保存到DB
const poll = user.polls.id(<some _id>);
const input = poll.create({}); // or user.polls.id(<some _id>).create({});
poll.inputs.push(input);
从controllers.js
Mongoose无法像这样跟踪子对象中的更改,因此该字段必须明确标记为需要更新,如下所示:
user.markModified('polls')
我最近遇到了类似的问题。您是否尝试添加以下内容:user.markModified(polls)@danielm谢谢。当然,当轮询是一个字符串-
user.markModified('polls')
时,这种方法效果很好。令人沮丧的是,一个子文档与另一个子文档保存记录的方法不同,但这可能是不可避免的
const User = require('../models/User');
router.post('/polls/inputs/add/:creatorId', function(req, res) {
let title = req.body.option.title,
order = req.body.option.order,
voters= [];
User.findOne({ creatorId: req.params.creatorId })
.then(user => {
const input = {order, title, voters};
user.polls.id(req.body.pollId).inputs.push(input);
user.save(function(err, data) {
if (err) {
res.statusCode = 500;
return res.json({ title: 'Save Error', message: err });
}
console.log('Success!');
res.json({ input: input });
});
}).catch(err => {
res.statusCode = 500;
return res.json({ title: 'DB Error', message: err });
});;
});
user.markModified('polls')