sql >> Databáze >  >> NoSQL >> MongoDB

Lepší vzor pro filtrování sbírek

Cítím se obzvláště inspirován, abych na to odpověděl kvůli odkazu DotA. :)

Pokud tedy správně chápu problém, neměli byste muset kontrolovat každou kombinaci, ale spíše opakovaně přidávat klíče do query objekt založený na obsahu tří proměnných relace. Myslím, že následující je logicky ekvivalentní vašemu returnFilterQuery funkce výše.

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

Všimněte si, že isEmpty může být bezpečnější kontrola než length v případě, že proměnná relace není pole.




  1. MongoDb se vypne pomocí kódu 100

  2. Nelze spustit Mongo DB

  3. TypeError:Nelze použít operátor 'in' k vyhledání '_id' v [{}]

  4. Pizza Tribes – strategická hra v reálném čase založená na prohlížeči pro více hráčů