Mongoose数组更新无法正常工作

时间:2017-04-20 03:59:22

标签: node.js mongodb mongoose

我的收藏中有以下文件:

{
    "_id": {
        "$oid": "58e47622968feb182c4a26b5"
    },
    "pollOptions": [
        {
            "vote": 0,
            "option": "blue"
        },
        {
            "vote": 0,
            "option": "green"
        },
        {
            "vote": 0,
            "option": "red"
        }
    ],
    "polltitle": "what is your favorite color?",
    "user": {
        "username": "mike",
        "email": "mike@email.com",
        "password": "abc",
        "passwordconf": "abc"
    },
    "__v": 0
}

我想根据用户的选择更新投票号。我只能更新投票号码(无法让它工作),所以我试图更新整个pollOptions数组。

以下是我所做的(2种不同的方法)。我有pollData数组,有3个对象,如上面的文档中所示。查询返回正确的对象,如上面的文档中所示。但是,这不会更新数据库中的pollOptions数组。不明白为什么这不起作用。

app.post('/api/poll/:userId/:polltitle/:vote', (req, res) => {
    let pollData = req.body;
    let userId = req.params.userId;
    let polltitle = req.params.polltitle;
    let query = { 'user.username': userId, 'polltitle': polltitle };
    myModel.findOne(query, (err, doc) => {
        doc.pollOptions = pollData;
        doc.save();
    });
})

以下情况也不起作用。

app.post('/api/poll/:userId/:polltitle/:vote', (req, res) => {
    let pollData = req.body;
    let userId = req.params.userId;
    let polltitle = req.params.polltitle;
    let query = { 'user.username': userId, 'polltitle': polltitle };
    let update = { $set: { 'pollOptions':  pollData } };
    myModel.findOneAndUpdate(query, update, (err, doc) => {
        res.send(doc);
    });
});

提前感谢您的帮助!

编辑:我相信我的查询工作正常。我可以在数据库中查询另一个文档,在URL中使用不同的polltitle参数,它将返回正确的文档对象。

我可以添加一个upvote(在我的动作创建者中),并且post请求的req.body将显示带有upvote的pollOptions数组。但是,res对象显示pollOptions数组没有此upvote。我必须在这里找到具有findOneAndUpdate函数的update属性的东西。

编辑2 pollData的控制台日志向我显示pollData是一个数组。

[ { option: 'blue', vote: 1 }, { option: 'green', vote: 0 }, { option: 'red', vote: 0 } ]

但是,typeof(pollData)的控制台日志告诉我pollData是一个对象。奇怪。这可能是更新无效的原因。

1 个答案:

答案 0 :(得分:0)

app.post('/api/poll/:userId/:polltitle/:vote', (req, res) => {
    let pollData = req.body;
    let userId = req.params.userId;
    let polltitle = req.params.polltitle;
    let query = { 'user.username': userId, 'polltitle': polltitle };
    let update = { $set: { 'pollOptions':  pollData } };
    myModel.findOneAndUpdate(query, update, (err, doc) => {
        res.send(doc);
    });
});
更新后

"pollOptions" : [ 
        {
            "vote" : 1.0,
            "option" : "blue"
        }, 
        {
            "vote" : 0.0,
            "option" : "green"
        }, 
        {
            "vote" : 0.0,
            "option" : "red"
        }
    ]
相关问题