2016-07-22 16 views
1

Ich baue eine ionische 2-Quiz-App mit couchdb und pouchdb, aber mit diesem Synchronisationsproblem.Ionic 2 couchDB pouchDB synning Ausgabe

Mein Couchdb-Server hat mehr als 20k Dateien und wird weiter zunehmen. Dateien sind als Topic-Dokumente und Quiz-Dokumente markiert. im Grunde Themen Dokumente hat eine Liste von Quiz-Dokumenten.

Ich habe etwa 200 Thema Dokumente und Ruhe sind Quiz Dokumente.

Nun, wenn ich verwende bidirektionale Synchronisierung mit dem folgenden Code

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

, sobald die App startet es startet alle 20k-Dateien aus dem couchdb Server herunterzuladen machte den App sehr langsam. Ich möchte das stoppen. Ich möchte Dateien nur herunterladen, wenn es erforderlich ist. Beispiel: Beispiel: Wenn die App laden möchte ich nur die App ein Dokument herunterladen "mainTopic" vom Server .dieses Dokument enthält Liste der Unterzweige, und diese Unterthemen wiederum Quiz-Liste. so wünsche ich Datei nur herunterladen, wenn ein bestimmtes Thema oder Quiz

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

     }); 
} 

ich habe ein wenig über Filter gelesen genannt wird, aber ich bin nicht sicher, wie sie zu benutzen. Bitte geben Sie

an

Antwort

2

Zuerst müssen Sie Filter in CouchDB erstellen. Ein Filter sieht so aus:

Grundsätzlich nimmt eine Filterfunktion ein Dokument und ein Anfrageobjekt. Aus dem Anfrageobjekt können Sie Ihre Parameter abrufen. Der Filter ist ziemlich einfach. Es muss true zurückgeben, wenn das Dokument den Filter passiert, andernfalls falsch.

Mit dem Beispielfilter "byPage" konnte ich nur die Daten synchronisieren, die mit einer bestimmten Seite verknüpft sind. Weitere Informationen über die gefilterte Replikation von PouchDB und CouchDB finden Sie unter this site.

Und für die vollständige Dokumentation auf CouchDB die Filterfunktion, überprüfen Sie this link.