2017-01-16 2 views
3

Я создаю приложение опроса. Мои определения схемы, как показано нижеНевозможно обновить вложенную модель в mongoose

var option = new mongoose.Schema({ 
    title: {type: String, required: true}, 
    votes: { type: Number, default: 0 } 
}); 

var poll = new mongoose.Schema({ 
    question: { type: String, required: true, unique: true}, 
    options: { type: [option], required: true} 
}); 

Я попытался

app.put('/vote/:id', function(req, resp) { 
    Poll.findById(req.params.id , function(err, pol) { 
     pol.options.findById(req.body.id, function(err, option){// getting error in this line 
      //do my stuff 
     }); 
    }); 
}); 

Но я получаю сообщение об ошибке. Как увеличить голос за счет использования мангуста?

ответ

0

Используйте оператор $inc обновление вместе с $ positional operator в

app.put('/vote/:id', function(req, resp) { 
    Poll.findOneAndUpdate(
     { "_id": req.params.id, "options._id": req.body.id }, 
     { "$inc": { "options.$.votes": 1 } }, 
     { "new": true } 
     function(err, pol) { 
      // pol contains the modified document 
     } 
    ); 
}); 

$ positional operator облегчает обновления массивов, содержащих вложенные документы, такие как options массив в вашем случае. Он позволяет получить доступ к полям во встроенных документах с помощью dot notation на $ operator.

+0

Я получаю pol как null –

+0

Это, вероятно, означает, что запрос не нашел подходящего документа. Можете ли вы подтвердить, что с запросом 'Poll.findOne ({" _id ": req.params.id," options._id ": req.body.id}, function (err, pol) {console.log (pol); }); '? – chridam

+0

Я получаю это как null. Но такой же идентификатор существует в mongodb –

Смежные вопросы