Você não precisa chamar
Query#where
repetidamente, pois você pode passar todas as condições para Mongoose Model#find
Como:var filteredQuery = {},
acceptableFields = ['gender', 'race', /* etc */ ];
acceptableFields.forEach(function(field) {
req.query[field] && filteredQuery[field] = req.query[field];
});
var query = Character.find(filteredQuery);
Você também vai querer limpar
req.query
dependendo dos parâmetros permitidos que você tem em mente.