所以我试图更新文档中数组内的对象的值。该文档的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上的其他答案并未对此问题提供太多见解。
我希望你能帮助我。谢谢!
答案 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);
});