2016-07-22 22 views
1

couchdbとpouchdbでionic 2 quizアプリを構築しましたが、この同期の問題に直面しています。イオン2 couchDB pouchDB syning issue

私のcouchdbサーバーには20k個以上のファイルがあり、今後も増加し続けます。 ファイルには、トピック文書とクイズ文書としてタグが付けられます。基本的にトピック文書にはクイズ文書のリストがあります。

私は約200のトピック文書を持ち、残りはクイズ文書です。

は、今私はすぐにアプリとして以下のコード

this.db = new PouchDB('mydb'); 
this.remote ='http://server_ip:5984/mydb'; 
this.db.sync(this.remote, options); 

で双方向の同期を使用し、それはアプリが非常に遅くなってCouchDBのサーバーからすべての20kのファイルのダウンロードを開始開始します。私はそれをやめたい。私は必要なときにのみファイルをダウンロードしたい。

例: アプリケーションがロードするときに、アプリケーションがサーバーから「mainTopic」と言うような文書をダウンロードしたいとき。この文書にはサブトピックのリストが含まれています。これらのサブトピックは順番にクイズのリストを含んでいます。私は、特定のトピックやクイズが

this.DataService.getDocument('mainTopic').then((result) => { 
this.data = result; 
}); 

//Function in my dataservice 
getDocument(id) {  
     if(id==null || id=='') 
     { 
     id='quiz-578f4b9cb991f'; 
     } 

     console.log('Going to fetch '+id); 

     return new Promise(resolve => { 

     this.db.get(id).then((result) =>{      
      this.data=result;   
      resolve(this.data);     
     }).catch((error) => { 
      console.log(error); 
     }); 

     }); 
} 

呼び出されたときにのみ、ファイルをダウンロードしたい私は、フィルタについて少し読んだが、私はそれらを使用する方法がわからないです。助言してください

答えて

2

まず、フィルターをCouchDBにビルドする必要があります。フィルタは次のようになります。

{ 
    "_id": "_design/global", 
    "language": "javascript", 
    "filters": { 
    "byPage": "function(doc, req) { return doc.page == req.query.page }" 
    } 
} 

基本的に、フィルタ関数はドキュメントとリクエストオブジェクトを取ります。リクエストオブジェクトから、あなたはあなたのparamsを得ることができます。フィルターはかなりシンプルです。ドキュメントがフィルタを渡す場合はtrue、そうでない場合はfalseを返す必要があります。

例のフィルタ「byPage」を使用すると、特定のページに関連付けられたデータのみを同期できます。

PouchDBおよびCouchDBフィルタレプリケーションの詳細については、this siteを参照してください。

また、CouchDBのフィルタ機能の詳細については、this linkをチェックしてください。