Используя Meteor, мне интересно, как лучше обращаться с различными коллекциями на стороне клиента, которые используют одну и ту же коллекцию базы данных на стороне сервера. Рассмотрим следующий пример: у меня есть коллекция User
, и на моей стороне клиента у меня есть список пользователей, которые являются друзьями, и у меня есть функция поиска, которая выполняет запрос во всей базе данных пользователей, возвращая список имен пользователей, которые соответствует запросу.
В методе публикации на стороне сервера у меня есть два запроса к одной коллекции, которые возвращают разные наборы документов. Должны ли эти данные входить в две отдельные коллекции на стороне клиента? Или все документы пользователя, соответствующие обоим запросам, попадают в одну коллекцию? Если последний, я бы дублировал код, используемый как для серверной, так и для клиентской стороны?
На сервере:
Meteor.publish('searchResults', function(query){
var re = new RegExp(query, 'i')
return Users.find({ 'name' : {$regex: re}})
})
На клиенте:
Session.set('searchQuery', null)
Meteor.autosubscribe(function(){
Meteor.subscribe('searchResults', Session.get('searchQuery'))
})
Template.search.events = {
'keyup #user-search' : function(e){
Session.set('searchQuery', e.target.value)
}
}
_.extend(Template.search, {
searchResults: function() {
var re = new RegExp(Session.get('searchQuery'), 'i')
return Users.find({ 'name' : {$regex: re}})
}
})
Это кажется правдоподобным решением, но не оптимальным. Что делать, если я хотел создать новую коллекцию на стороне клиента, состоящую из результатов поиска из нескольких коллекций на стороне сервера?