sql >> Databasteknik >  >> NoSQL >> MongoDB

Bättre mönster för filtrering av samlingar

Jag känner mig särskilt inspirerad att svara på detta på grund av DotA-referensen. :)

Så om jag förstår problemet rätt bör du inte behöva kontrollera varje kombination, utan snarare lägga till nycklar upprepade gånger i query objekt baserat på innehållet i tre sessionsvariabler. Jag tror att följande logiskt motsvarar din returnFilterQuery funktion ovan.

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

Observera att isEmpty kan vara en säkrare kontroll än length om sessionsvariabeln inte är en array.




  1. kan FindIterable<Document> läsa in alla dokument?

  2. MongoDB $not Aggregation Pipeline Operator

  3. Skapa en mongodb-begränsad samling med c# api

  4. Mongodb-frågan använder inte prefix på sammansatt index med textfält