Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用嵌套模式在Mongoose中创建子文档_Node.js_Mongodb_Mongoose_Mongoose Schema - Fatal编程技术网

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')