sql >> Database >  >> NoSQL >> MongoDB

Beter patroon voor het filteren van collecties

Ik voel me vooral geïnspireerd om dit te beantwoorden vanwege de DotA-referentie. :)

Dus als ik het probleem goed begrijp, zou het niet nodig moeten zijn om elke combinatie te controleren, maar eerder herhaaldelijk sleutels toe te voegen aan de query object op basis van de inhoud van drie sessievariabelen. Ik denk dat het volgende logisch equivalent is aan uw returnFilterQuery functie hierboven.

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

Merk op dat isEmpty kan een veiligere controle zijn dan length voor het geval de sessievariabele geen array is.




  1. Hoe HBase in CDP de S3 van Amazon kan benutten

  2. Inzicht in Hadoop High Availability-functie

  3. Mongo-aggregatie Overeenkomen met meerdere waarden

  4. mongoDB sharding voorbeeld