sql >> Base de Datos >  >> NoSQL >> MongoDB

Mejor patrón para filtrar colecciones

Me siento particularmente inspirado para responder esto debido a la referencia de DotA. :)

Entonces, si entiendo el problema correctamente, no debería necesitar verificar cada combinación, sino agregar claves repetidamente a la query objeto basado en el contenido de tres variables de sesión. Creo que lo siguiente es lógicamente equivalente a su returnFilterQuery función anterior.

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

Tenga en cuenta que isEmpty puede ser una comprobación más segura que length en caso de que la variable de sesión no sea una matriz.