Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 - Fatal编程技术网

Node.js Mongoose阵列更新不工作

Node.js Mongoose阵列更新不工作,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我收藏了以下文件: { "_id": { "$oid": "58e47622968feb182c4a26b5" }, "pollOptions": [ { "vote": 0, "option": "blue" }, { "vote": 0, "option": "green" },

我收藏了以下文件:

{
    "_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数组

下面是我所做的(两种不同的方法)。我有正确的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(在我的action creator中),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是一个对象。奇怪。这可能是更新不起作用的原因

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"
        }
    ]

如果
req.params.userId
ObjectId
类型,则查询将无法工作,因为
user.username
String
'mike'
在示例中)typeof(userId)的控制台日志告诉我userId是字符串。是的,当然,我的错,当我说
ObjectId
时,我指的是24个字符的字符串,类似于
5768323d7297115c1606f6ad
您可以尝试
let query={'user.username':userId'pollttitle':pollttitle'pollpoptions.option':blue};让update={$inc:{'pollpoptions.$.vote':1};myModel.findOneAndUpdate(查询,更新,(err,doc)=>{res.send(doc);})为用户选择的选项增加投票数的查询。@Veeram:我尝试了你的建议。这不起作用:(对不起,我看不出你在这里修改了什么。我没有在这里修改,我只是在这里给出解决方案。