MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Meilleur modèle pour filtrer les collections

Je me sens particulièrement inspiré pour répondre à cette question à cause de la référence DotA. :)

Donc, si je comprends bien le problème, vous ne devriez pas avoir besoin de vérifier chaque combinaison, mais plutôt d'ajouter à plusieurs reprises des clés à la query objet basé sur le contenu de trois variables de session. Je pense que ce qui suit est logiquement équivalent à votre returnFilterQuery fonction ci-dessus.

var returnFilterQuery = function() {
  var query = {game: 'dota'};

  var modifyQueryIfArray = function(key, sessionKey) {
    var value = Session.get(sessionKey);
    if (!_.isEmpty(value))
      query[key] = {$in: value};
  };

  modifyQueryIfArray('gamemode', 'dotaMode');
  modifyQueryIfArray('region', 'dotaRegion');
  modifyQueryIfArray('skill', 'dotaSkill');

  return Session.set('dotaFilter', query);
};

Notez que isEmpty peut être une vérification plus sûre que length au cas où la variable de session n'est pas un tableau.