All those if(req.query ...) are a bit messy, I suggest to use "abstract" schemas to leverage on [mongoose validator](http://mongoosejs.com/docs/validation.html)
I mean defining query schemas we fill with request queries and call validate manually, without never calling save().