2014-11-23 5 views
1

Предположим, что у меня есть две коллекции Meteor: «Станции» и «Песни». Каждая песня имеет внешний ключ для станции, чтобы показать, что она была воспроизведена на этой станции.Ограничение сбора метеоров

Теперь я хочу, чтобы опубликовать последние 3 играли песни каждой станции, как так:

Meteor.publish("all-last-three-songs", function() { 
    var stations = Stations.find(); 
    var stationIDs = stations.map(function(station) { return station._id }); 
    var songs = Songs.find({station_id: {$in: stationIDs}}, {sort: {time: -1}, {limit: 3}}); 
    return songs; 
}); 

, который публикует только 3 песни для всех станций, конечно. Как я могу добиться того, что курсор для последних 3 песен для каждой станции будет возвращен? Я не хочу делать фильтрацию на стороне клиента.

Спасибо! :)

ответ

0

Вы можете вернуть массив курсоров, используя функцию карты. Просто вставьте свой запрос песни в текущую функцию карты. Вместо того, чтобы возвращать идентификатор, он вернет последние три песни для станции с данным идентификатором.

Вы также можете преобразовать это в массив массивов или свернуть его в один массив.

Затем вы можете выполнить новый запрос в базе данных для всех песен, идентификатор которых находится в этом массиве.

+0

Спасибо! Две вещи здесь: поскольку в документации указано, что курсоры должны поступать из разных коллекций, что делает невозможным ее решение таким образом в моем случае. Возвращение массива не совсем «метеорный», не так ли? Я не думаю, что с этой реакцией могу справиться с этой прохладной реакцией на полный стек. – user1259201

Смежные вопросы