Intro: I am creating a StackExchange clone using Node and Mongo to learn the language. I am currently working on the API.
I have the following 'questionSchema':
var questionSchema = new Schema({
  _id       : {type: String, default: shortid.generate},
  title     : {type: String, required: true},
  question  : {type: String, required: true},
  user      : {type: Schema.ObjectId, ref: 'User'},
  points    : {type: Number, default: 0},
  date      : {type: Date, default: Date.now},
  answers   : [answerSchema],
  votes     : [{
                  user: {type: Schema.ObjectId, ref: 'User', required: true},
                  vote: {type: Number, enum: [-1,0,1]}
              }],
  __v       : {type: Number, select: false}
});
The idea is that when a user votes on a question the points field is incremented (or decremented) and the userid and vote added to the votes array. I have the vote array to detect if the user has already voted and prevent additional votes.
The problem: I'm having trouble actually checking if the user has voted (checking if their userid exists in the votes array). I have been playing around with adding the method 'hasVoted' to the questionSchema but:
- I'm not sure how to actually make the check happen.
- I'm also not sure if there is a way for me to filter the votes array during the query (at MongoDB) instead of after node gets the results.
This is my attempt at the method which I know is wrong:
//Has the user already voted on this question?
questionSchema.methods.hasVoted = function (userid, cb) {
  this.votes.filter(function(vote) {
    if(userid == vote._id) {
        return '1';
    } else {
        return '0';
    }
  });
};
 
     
    