MongoDB-猫鼬$ inc在文档数组内的对象

马塔库斯

因此,我正在尝试更新文档中数组内的对象的值。该文档的架构如下所示:

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的其他答案也没有对该问题给出太多的见解。

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

唤醒

根据我的判断,您不需要最初的发现。您可以在一个更新语句中完成所有操作。您只需指定索引就可以匹配要更新的数组元素:

      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);
  });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章