2016-08-09 31 views
1

Ich benutze PouchDb mit einem CouchDb Backend und auf dem Client beim Start der Website, ich füge ein Dokument (vor der Datenbank synchronisiert) mit der gleichen 'ID' wie ein Dokument in der Server.PouchDb/CouchDb Konflikt Problem

Dies ist gut, da es das gleiche Dokument ist, aber als PouchDb Dokument ist _rev: 1 und das couchDb Dokument könnte sagen _rev: 2, wenn mein PouchDb synchronisiert und ich versuche, das Dokument wieder zu bekommen bekomme ich Konflikte.

Ich habe also dann auf dem Client:

{_id: 'mydoc', _rev: '1-xxxxxxxxx'} UND {_id: 'mydoc', _rev: '2-xxxxxxxxx'}

Aber die richtige Version ist eigentlich _rev: 1 (da dies die Version war, die der Client zuerst erstellt hat).

Wie kann ich dieses Problem auf dem Client korrekt beheben, damit der Konflikt behoben wird?

Antwort

0

Sie haben zwei Möglichkeiten:

Zunächst erstellen Dokumente mit unterschiedlichen IDs. Es hängt von der Anwendung ab; Vielleicht ist das nicht möglich oder nicht angemessen für Ihre Situation.

Zweitens benötigen Sie Code, um die "falsche" Revision des Dokuments zu löschen. (Sie können dies auf dem Client oder auf dem Server tun. In beiden Fällen repliziert das Update auf das andere System.)

Zum Beispiel, wenn Ihre Client-Anwendung weiß, dass Revision 1 korrekt ist, dann wenn Sie sehen Widersprüchliche Revisionen, löschen Sie alle außer dem richtigen. Diese Löschoperationen werden auf CouchDB repliziert und Sie werden bald nur noch die eine, korrekte Revision haben.

+0

So verwende ich dieses Plugin "https://github.com/jo/pouch-resolve-conflicts" aber mit den oben genannten Daten es Fehler auf der db.bulkDocs beim Setzen _rev: 2 mit _deleted: True und verlassen _rev: 1 wie es ist. Ich habe überlegt, "new_edits: false" mit BulkDocs zu verwenden, um den Put zu erzwingen, aber ich denke, das könnte eine schlechte Idee sein. – David