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语句中指定索引。更新的回答下次请在发布前先测试。您应该知道这会产生错误。如果您仍然需要知道什么错误:意外令牌+