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

Bedre mønster til filtrering af samlinger

Jeg føler mig særligt inspireret til at svare på dette på grund af DotA-referencen. :)

Så hvis jeg forstår problemet korrekt, skulle du ikke skulle tjekke hver kombination, men snarere gentagne gange tilføje nøgler til query objekt baseret på indholdet af tre sessionsvariabler. Jeg tror, ​​at følgende logisk svarer til din returnFilterQuery funktion ovenfor.

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

Bemærk, at isEmpty kan være en sikrere kontrol end length hvis sessionsvariablen ikke er et array.




  1. hvordan tjekker man redis-instansversionen?

  2. @CompoundIndex virker ikke i Spring Data MongoDB

  3. ikke i stand til at oprette forbindelse til mongodb hostet på ekstern server ved hjælp af monk

  4. Inden $unwind skal du kontrollere, om underdokumentet ikke er tomt