Я пытаюсь научить себя Node.js с помощью Express и Mongoose.Mongoose findOneAndUpdate надлежащее использование
Часть сайта, я работаю система опроса, и я получил все работает, кроме одной маленькой (хотя и довольно важная часть) отслеживания пользователей голосов ...
У меня есть обработчик опроса который содержит этот код
pollVote : function(req, res, next) { //needs poll name, user, and their vote
Polls.findOne({'active' : true}, function(err, poll) {
if(err)
throw err;
if(poll) {
if(poll.users.indexOf(req.user.userData.username) > -1) {
req.polls.response = "You have already voted...";
next();
} else {
var index = poll.labels.indexOf(req.polls.vote);
var voteIndex = {};
voteIndex['votes.' + index];
var query = {'active' : true};
var update = {$inc : {voteIndex : 1}, $push : {users : req.user.userData.username}};
var options = {};
Polls.findOneAndUpdate(query, update, options, function(err, poll){
if(err)
throw err;
req.polls.response = "Voted";
next();
});
}
} else {
req.polls.response = "FAILED";
next();
}
});
},
prepVote : function(req, res, next) {
var data = req.body.stringData;
data = data.split(',');
var name = data[0];
var vote = data[1];
req.polls = {
name : name,
vote : vote,
response : ""
}
next();
},
Это называется мой маршрутизатор как так
app.post('/poll-vote', requestedOn, isLoggedIn, pollHandler.prepVote, pollHandler.pollVote, function(req, res) {
res.send(req.polls.response);
});
Мои Mongoose схемы, как так
var mongoose = require('mongoose');
var pollSchema = mongoose.Schema({
name : String,
active : Boolean,
users : [String],
labels : [String],
votes : [Number],
answerDesc : [String],
created : Date,
deactivated : Date
});
module.exports = mongoose.model('Polls', pollSchema);
Когда я пытаюсь проголосовать, я получаю сообщение MongoError, в котором «'$ inc» пуст. Вы должны указать такое поле: {$ inc: {< field>: ...}} Однако, как я его настроил?
Я прочел здесь несколько разных записей и API Mongoose. Сначала я пытался сделать это с сохранением, но это не спасло мои изменения.
Я исхожу из фона SQL, поэтому эта система на основе документов немного запутанна. Thanks
Вы хотите увеличить «голосов» вместо 'voteIndex'? 'voteIndex' не входит в вашу схему для модели« Опрос ». – roflmyeggo
@roflmyeggo voteIndex - это переменная, которую я задал для ['голосов.' + index], где index - indexOf метка, выбранная пользователем в опросе. –
'$ inc' используется для увеличения поля в базе данных по найденному документу. Это функция 'findOneAndUpdate'. :) – roflmyeggo