2015-06-02 3 views
1

я пришел к следующей задаче:Meteor: Фильтр документов по их публикации происхождения на стороне клиента

  • У меня есть собственный сервер на стороне публикации «P1», который возвращает набор документов из коллекции «C», сервер является единственным, способным построить это подмножество

  • На моем клиенте я подписался на 2 публикации («P1» и «P2»), возвращая 2 подмножества коллекции «C», они могут перекрываться.

  • Я хотел бы указать на моем клиенте только элементы, возвращаемые публикацией «P1», то есть тот, который сервер может генерировать только набор. Проблема в том, что я не могу использовать регулярный запрос поиска для фильтрации коллекции «C» и получить подмножество «P1». Это потому, что только сервер может сделать это произвольно.

Как я мог затем фильтровать на стороне клиента документ в соответствии с его публикацией?

ответ

0

Насколько я знаю, вы не можете напрямую это сделать.

Возможным решением может быть использование метода Метеор для запроса идентификаторов, необходимых для публикации, а затем сделать подписку с использованием этих идентификаторов, а затем вы можете фильтровать клиентскую сторону, используя список идентификаторов, которые у вас уже есть.

0

Метеор будет автоматически публиковать правильные документы в одном экземпляре (поэтому они не публикуются дважды).

Из-за этого клиент на самом деле не сможет сказать разницу, так как сервер не будет четко понимать, что коллекции перекрываются.

Там нет другого пути, кроме как использовать метод как Элизье предлагает:

Meteor.methods({ 
    differences: function() { 

     var queryOne = _(MyCollection.find({..}).fetch()).pluck("_id"); 
     var queryTwo = _(MyCollection.find({..}).fetch()).pluck("_id"); 

     var differences = _([queryOne, queryTwo]).difference(); 
     var intersection = _([queryOne, queryTwo]).intersection(); 

     return differences 
    } 
});