因此,我正在尝试更新文档中数组内的对象的值。该文档的架构如下所示:
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] 删除。
我来说两句