MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Besseres Muster zum Filtern von Sammlungen

Ich fühle mich aufgrund der DotA-Referenz besonders inspiriert, darauf zu antworten. :)

Wenn ich das Problem richtig verstehe, sollten Sie also nicht jede Kombination überprüfen müssen, sondern immer wieder Schlüssel zur query hinzufügen Objekt basierend auf dem Inhalt von drei Sitzungsvariablen. Ich denke, das Folgende ist logisch äquivalent zu Ihrer returnFilterQuery Funktion oben.

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

Beachten Sie, dass isEmpty ist kann eine sicherere Prüfung sein als length falls die Sitzungsvariable kein Array ist.