MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

По-добър модел за филтриране на колекции

Чувствам се особено вдъхновен да отговоря на това поради препратката към DotA. :)

Така че, ако разбирам проблема правилно, не трябва да проверявате всяка комбинация, а по-скоро многократно добавяне на ключове към query обект въз основа на съдържанието на три променливи на сесията. Мисля, че следното е логически еквивалентно на вашия returnFilterQuery функция по-горе.

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

Обърнете внимание, че isEmpty може да е по-безопасна проверка от length в случай че променливата на сесията не е масив.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. как мога да видя какви портове mongo слуша от mongo shell?

  2. Как да намеря в mongodb до последния елемент от масив?

  3. Заявката връща повече от очакваните резултати

  4. Как да намерите подниз в поле в Mongodb

  5. Отпечатване на изхода на заявката на Mongo във файл, докато сте в mongo shell