MongoDB - Mongoose $ inc一个文档数组中的对象

时间:2016-08-14 21:23:39

标签: javascript mongodb mongoose

所以我试图更新文档中数组内的对象的值。该文档的Schema如下所示:

var pollSchema = new Schema({
  title: String,
  hash: String,
  answers: [{answer: String, votes: Number}]
});

这就是我当前的更新代码:

module.exports.updatePoll = function(socket, data){
  var answerss = 'answers.0.votes';

  hash = data.url.match(/\/([^/]*)$/)[1];
  Poll.findOne({'hash' : hash}, function(err, poll){
    if (err) return handleError(err);
    console.log(poll.answers[data.id])
  });
  Poll.update({hash: hash}, {$inc: {'answers.{data.id}.votes': 1}}, function(err, poll){
    if (err) return console.log(err);
    //socket.emit('updatePoll', hash);
  });

我尝试在其中粘贴answerss而不是'answers.{data.id}.votes',并尝试了其他一些事情。只有当我直接粘贴'answers.0.votes'时它才真正起作用。这是一个问题,因为data.id可以是0到10的值。我不知道我将如何实现这一点,而stackoverflow或google上的其他答案并未对此问题提供太多见解。

我希望你能帮助我。谢谢!

1 个答案:

答案 0 :(得分:2)

你不需要我能说出的初步发现。您可以在一个更新语句中完成所有操作。您只需通过指定索引来匹配要更新的数组元素:

      var answerKey = 'answers.' + data.id + '.votes';
  var updateJSON = {$inc: {}};
  updateJSON.$inc[answerKey] = 1;
  hash = data.url.match(/\/([^/]*)$/)[1];
  Poll.update({hash: hash}, updateJSON, function(err, poll){
    if (err) return console.log(err);
    //socket.emit('updatePoll', hash);
  });