OK, tôi đã tìm ra cách để thực hiện việc này mà không cần thực hiện lại toàn bộ cơ sở dữ liệu của mình. Bravo Meteor!
trên máy chủ:
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();
}
});
và trên máy khách:
Deps.autorun(function(){
Meteor.subscribe('search_results', Session.get('currentQuery'));
});
SearchCollection = new Meteor.Collection('search_collection');
Giờ đây, SearchCollection chứa dữ liệu tôi muốn từ kết quả, nơi tôi có thể quyết định dữ liệu nào tôi muốn từ từng bộ sưu tập riêng biệt.
Một điều bất lợi là tôi đang sao chép dữ liệu rõ ràng - một số nếu không phải tất cả các bản ghi này đều đã tồn tại trên máy khách ...