OK, ik heb een manier bedacht om dit te doen zonder mijn hele database opnieuw te doen. Bravo Meteor!
op de server :
Meteor.publish('search_results', function(query){
if(query){
var self = this;
var actors = Actors.find({ $or : [{ name : query}, { actor_biography : query }] ),
films = Films.find({ $or : [{ name : query}, { actor_biography : query }] ),
cinemas = Cinemas.find({ $or : [{ name : query}, { actor_biography : query }] );
actors.forEach(function(doc){
self.added('search_collection', doc._id, { name : doc.name, type : 'actor' });
});
films.forEach(function(doc){
self.added('search_collection', doc._id, { name : doc.name, type : 'film' });
});
cinemas.forEach(function(doc){
self.added('search_collection', doc._id, { name : doc.name, type : 'cinema' });
this.ready();
} else {
this.ready();
}
});
en op de klant :
Deps.autorun(function(){
Meteor.subscribe('search_results', Session.get('currentQuery'));
});
SearchCollection = new Meteor.Collection('search_collection');
Nu bevat SearchCollection de gegevens die ik wil van de resultaten, waar ik kan beslissen welke gegevens ik van elke verzameling afzonderlijk wil hebben.
Een nadeel is dat ik duidelijk gegevens dupliceer - sommige, zo niet al deze records bestaan al op de client...