2013-12-13 41 views
4

我在如何在我的Meteor應用中設置集合時遇到了一些困難。用戶搜索欄是我的應用程序的核心部分,而用戶需要能夠跨多個不同的集合輸入一個搜索,並有結果:Meteor.js - 在多個集合上執行用戶搜索的方法

user query : 'foo' 

var query = 'foo'; 
var actors_results = Actors.find({ $or : [{ name : query}, { actor_biography : query }]); 
var films_results = Films.find({ $or : [{ name : query}, { description : query }]); 
var cinemas_results = Cinemas.find({ $or : [{ name : query}, { genres : query }]); 

對於搜索結果顯示這是不好的 - 我不我認爲(???)我可以將這些遊標組合成一個遊標,並且像分頁這樣簡單的事情幾乎不可能做到(或者我不知道該怎麼做)。

我知道的唯一的解決辦法是讓一個SuperCollection,我把所有的文件,並有一個重要的「類型」這可能是「演員」,「電影」或「電影」,然後分頁等變得容易。

但在我看來,這確實使其他一切變得複雜......數據庫的結構不再反映數據。演員和電影院在數據/結構方面沒有共同之處,我只需要能夠並行搜索它們。

另外,我將如何設置SuperCollection的多個驗證方案,取決於字段'type'的值?

任何想法/建議非常感謝!

回答

2

好的我已經制定了一種方法來做到這一點,而無需重新做我的整個數據庫。布拉沃流星!

在服務器上

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(); 
    } 
}); 

,並在客戶端上:

Deps.autorun(function(){ 
    Meteor.subscribe('search_results', Session.get('currentQuery')); 
}); 

SearchCollection = new Meteor.Collection('search_collection'); 

現在SearchCollection包含我從結果來看,在那裏我可以決定想要的數據,我從每個集合分別要什麼數據。

一個缺點是,我清楚地複製數據 - 一些如果不是所有的這些記錄存在於客戶端已經在...

+2

爲什麼不嘗試新的易於搜索的氣氛包。 https://github.com/matteodem/meteor-easy-search – Warz

+2

感謝@Warz提示 - 我的字段中沒有太多文本,更像是鍵值對,所以我認爲彈性搜索可能有點矯枉過正。在這個問題上,Mongo的新的全文搜索也值得一看,那些需要更加強大的文本搜索的人 – Petrov

+0

@Warz是一款易於搜索支持多集合的搜索嗎?任何示例如何做到這一點? – Jaro

相關問題