Meteor: Върнете уникални записи за списък с филтър

Здравейте, имам прост филтър, който позволява на потребителя да филтрира списък с публикации въз основа на едно падащо меню на всеки списък, който има свързана публикация.

С други думи, позволява ви да филтрирате всички публикации със списък от „Любими места за напитки в Уилямсбърг“

Искам обаче този списък да се покаже в падащото меню само веднъж (в момента той ще се покаже 3 пъти, ако например има 3 публикации, свързани с този списък). Ето помощната функция...

Template.userListsFilter.helpers({
  userlistsfilter: function() {
  var currentUser = Meteor.userId();
      return Posts.find({userId: currentUser, postlistid: { $exists : true }        },{sort:{postlistname:1} },{reactive:true});
  }
});

person cmee    schedule 17.12.2014    source източник


Отговори (1)


Ако сте на клиента, това може да стане с функция uniq от пакета за подчертаване. На сървъра това може да се направи, като се използва директно драйверът на node mongo.

Предполагам, че уникалното поле е postListName. За клиента кодът може да бъде такъв.

var query = Posts.find({userId: currentUser, postListId: { $exists : true }},{sort:{postListName:1} });
var postListNames = query.map( function( post ){ return post.postListName });  
postListNames = _.uniq( postListNames );
person user728291    schedule 18.12.2014
comment
Опитахте това, но сега не връща нищо? Полето е postlistname (всички с малки букви): - person cmee; 12.01.2015
comment
Поставих кодовия фрагмент на jsfiddle - не можах да си спомня как да форматирам кодови блокове в коментари в stackoverflow. jsfiddle.net/cmeethree/atqppLwp - person cmee; 12.01.2015
comment
Има някои правописни грешки с имена на променливи понякога camelCase. Демо в meteorpad. - person user728291; 13.01.2015
comment
Добре, страхотно, благодаря, ще погледна. Всъщност поправям по-голям проблем в надграждането си (така че получавам грешки, не стартирам) от 0.9.3 на 1.0, така че след като го поправя, ще направя нов опит в това. Надяваме се да се разреши на следващия ден. - person cmee; 13.01.2015
comment
Добре, коригирах проблема си с надстройката. Така че, когато се опитах да стартирам в meteorpad, получих грешка: Приложението ви се срива. Ето последния дневник. /home/meteor/.meteor/packages/meteor-tool/.1.0.38.ieqxkv++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/dev_bundle/server- lib/node_modules/fibers/future.js:173 throw(ex); ^ TypeError: undefined не е функция в /app/.meteor/local/build/programs/server/boot.js:182:5 Излезе с код: 8 Вашето приложение се срива. Изчакване на промяна на файла. - person cmee; 14.01.2015
comment
Грешката е причинена от оставянето на Meteor.startup() без аргумент в кода на сървъра. Поправено сега. - person user728291; 15.01.2015
comment
Хммм, добре, да, по някаква причина все още не работи за мен. Дори това не работи: var query = Posts.find({userId: currentUser, postListId: { $exists : true }},{sort:{postlistname:1} }); return query; Сложих шаблона си и на fiddle... jsfiddle.net/cmeethree /atqppLwp - person cmee; 15.01.2015
comment
Добре, поиграх си още малко. Трябваше също да има reactive:true. Ето крайния код: var query = Posts.find({userId: currentUser, postlistid: { $exists : true } },{sort:{postlistname:1} },{reactive:true}).fetch(); return _.uniq(query, false, function(list) {return list.postlistname}); - person cmee; 15.01.2015
comment
Здравейте, бихте ли публикували кода на това как изглежда вашият html шаблон? Вярвам, че филтърът за уникалност работи, но сега не съм сигурен как да извикам конкретната променлива postListName в #each итерацията на html. - person Kyle Bachan; 02.02.2015