2017-04-17 79 views
0

我想增加voteCount由1当用户选择一个特定的选项。数据是这样的 -猫鼬:findByIdAndUpdate不更新文件

{ 
    "_id": { 
     "$oid": "58f2ef61af2c5c068c2f1d7a" 
    },   
    "pollName": "Who is your favourite cricketer ?",   
    "options": [ 
     { 
      "name": "Dhoni", 
      "_id": { 
       "$oid": "58f2ef61af2c5c068c2f1d7d" 
      }, 
      "voteCount": 10 
     }, 
     { 
      "name": "Kohli", 
      "_id": { 
       "$oid": "58f2ef61af2c5c068c2f1d7c" 
      }, 
      "voteCount": 6 
     } 
    ], 
    "__v": 0 
} 

我想这一点 -

// req.body.votedFor is coming fine. 
PollModel.findByIdAndUpdate(req.session.pollId, {$inc: { options: {name: req.body.votedFor, voteCount : 1 } }}, {new: true}, function(err, doc){ 
    if(err){ 
     console.log("Something wrong when updating data! "+err); 
    } 
    console.log(doc); 
    }); 

这是不更新voteCount和我得到这个消息 -

东西错了,当更新数据! MongoError:不能与非数字的参数增量:{选择:{voteCount:1,名称: “纵帆船”}}
不确定

我在哪里做错了吗? 请帮忙

+0

你是否尝试从回调函数读取错误参数?我认为这会帮助你确定一个问题。 – Dmitry

+0

@Dmitry问题出现在{$ inc ...}中。但如何去选择名称?请指导。 –

+0

@RiyaSaxena得到错误,意外的标识符$ inc: –

回答

0

更新了一点@Veeram解决方案。这是工作代码 -

PollModel.findOneAndUpdate({"_id":req.session.pollId, "options.name": req.body.votedFor}, {$inc:{"options.$.voteCount":1} }, {new: true}, function(err, doc){ 
    if(err){ 
     console.log("Something wrong when updating data! "+err); 
    } 
    console.log(doc); 
    res.send(doc); 
    }); 
0
if(req.body.votedFor && req.body.votedFor!='') 
    setObj['options.name'] = req.body.votedFor; 
qobj['options.voteCount']=1; 
var updateObj = {}; 
updateObj['$set'] = setObj; 
updateObj['$inc'] = qobj; 
PollModel.findByIdAndUpdate({"_id":req.session.pollId},updateObj, {new: true}, function(err, doc){ 
    if(err){ 
     console.log("Something wrong when updating data! "+err); 
} 
console.log(doc); 

});

+0

得到这个错误 - MongoError:不能使用该部分(options.name的选项)遍历元素 –