2017-05-06 4 views
0

Ich habe eine lokale PouchDB von Aufgaben. Arbeitete ziemlich gut, bis ich versuchte, die Synchronisation mit IBM Cloudant noSQL einzurichten. Das Hauptproblem ist so weit mit der remove() -Methode, die ich so geschrieben haben:PouchDB synchronisiert Löschungen nicht, wenn revs_limit größer als 0 ist

$(document).on("click","#taskList li .delete", function(){ 

    db.remove(id,rev); 
    refreshTasks(); 

}); 

Das Verfahren funktioniert perfekt, wenn sie ausgeschaltet ist, aber sobald ich synchron mit den Linien aktivieren unten, es gewann Entfernen Sie die Aufgabe nicht von lokal und remote. Ich bin mit PouchDB mit diesem Code synchronisieren:

db.sync(remote_db, { 
    live: true, 
    retry: true 
}).on('change', function (change) { 
    // yo, something changed! 
}).on('paused', function (info) { 
    // replication was paused, usually because of a lost connection 
}).on('active', function (info) { 
    // replication was resumed 
}).on('error', function (err) { 
    // totally unhandled error (shouldn't happen) 
}); 

Meine Datenbank mit diesem erstellt:

var db = new PouchDB('tasks', {revs_limit: 1, auto_compaction: true}); 

Nun, wenn ich die Datenbank mit einem revs_limit von 0 erstellen, funktioniert es wieder.

Was könnte passieren?

Antwort

1

Wenn Sie ein Dokument aus Pouch entfernen, ähnelt die zugrunde liegende Operation einem Update - das Update enthält eine Lösch- "Tombstone" -Revision, die zurück auf den Server synchronisiert werden muss.

Durch die Einstellung revs_limit:1 verfolgt die lokale Datenbank nur die aktuellste Revision für jedes Dokument, einschließlich dieses Löschvorgangs, sodass bei der Synchronisierung nicht bekannt ist, an welche übergeordnete Revision der Löschvorgang angefügt werden soll. Dies ist kein Fehler in Couch/Cloudant - es würde nur ein konflikthaftes Dokument auf dem Server erstellen.

Ich empfehle das Erstellen der Datenbank ohne den Standard revs_limit zu ändern. Wirklich, das einzige Szenario, wo das Sinn macht, ist, wenn Sie Dokumente haben, die unveränderlich sind - d. H. Sie werden niemals aktualisiert/gelöscht.

Verwandte Themen