MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Pattern migliore per il filtraggio delle raccolte

Mi sento particolarmente ispirato a rispondere a questo a causa del riferimento DotA. :)

Quindi, se ho capito bene il problema, non dovresti aver bisogno di controllare ogni combinazione, ma piuttosto aggiungere ripetutamente chiavi alla query oggetto basato sul contenuto di tre variabili di sessione. Penso che quanto segue sia logicamente equivalente al tuo returnFilterQuery funzione sopra.

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);
};

Nota che isEmpty potrebbe essere un controllo più sicuro di length nel caso in cui la variabile di sessione non sia un array.