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

Javascript MongoDB-Mongoose$inc文档数组中的对象,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,所以我试图更新文档中数组中对象的值。文档的架构如下所示: var pollSchema = new Schema({ title: String, hash: String, answers: [{answer: String, votes: Number}] }); 我当前的更新代码是这样的: module.exports.updatePoll = function(socket, data){ var answerss = 'answers.0.votes'; has

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

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);
  });
我试着在里面粘贴
answers
,而不是
'answers.{data.id}.voces'
,还尝试了其他一些方法。只有当我直接粘贴“answers.0.Voces”时,它才真正起作用。这是一个问题,因为
data.id
可以是0到10的值。我不知道我将如何实现这一点,其他关于stackoverflow或google的答案也没有给出多少关于这个问题的见解


我希望你能帮助我。谢谢

根据我的判断,你不需要最初的发现。您可以在一个update语句中完成这一切。只需指定其索引即可匹配要更新的数组元素:

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

你不需要从我能告诉你的初步发现。您可以在一个update语句中完成这一切。只需指定其索引即可匹配要更新的数组元素:

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

啊,谢谢,但是答案是。答案是字符串而不是数字,数字是答案[data.id]。所以我需要的只是答案值?假设data.id与要递增的数组元素的answers.answer的值匹配,这应该不会有任何区别。但事实并非如此,answers.answer类似于:“这是一个答案”。data.id将是0,因为它是第一个答案。第二个答案是1,答案是:'这是第二个答案'如果是这样的话,你可以在$inc语句中指定索引。更新的回答下次请在发布前先测试。您应该知道这会产生错误。如果您仍然需要知道错误:意外令牌+ah谢谢,但是answers.answer是字符串而不是数字,数字是answers[data.id]。所以我需要的只是答案值?假设data.id与要递增的数组元素的answers.answer的值匹配,这应该不会有任何区别。但事实并非如此,answers.answer类似于:“这是一个答案”。data.id将是0,因为它是第一个答案。第二个答案是1,答案是:'这是第二个答案'如果是这样的话,你可以在$inc语句中指定索引。更新的回答下次请在发布前先测试。您应该知道这会产生错误。如果您仍然需要知道什么错误:意外令牌+