私はExpressとMongooseを使ってNode.jsを教えようとしています。マングース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);
});
マイマングーススキーマのように私のルータによって呼び出され、このコードが含まれています
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);
投票しようとすると、「 '$ inc」が空であることを示すMongoErrorが表示されます。あなたは次のようなフィールドを指定する必要があります:{$ inc:{< field>:...}}しかし、それで私はそれをどのように設定しましたか?
ここでは、Mongoose APIとはかなり異なる項目を探しました。もともと私は保存でこれをやろうとしていましたが、私の変更を保存していませんでした。
私はSQLのバックグラウンドから来たので、このドキュメントベースのDBシステムはちょっと混乱しています。ありがとう
「voteIndex」ではなく「votes」を増やすことを意味しますか? 'pollIn'はあなたのスキーマの' Poll'モデルではありません。 – roflmyeggo
@roflmyeggo voteIndexは私が[votes]に設定した変数です。 + index] indexは、ユーザーが投票で選択したラベルのindexOfです。 –
'$ inc'は、見つかった文書のデータベースのフィールドをインクリメントするために使用されます。これは 'findOneAndUpdate'の関数です。 :) – roflmyeggo