2012-07-26 11 views
6

Ich brauche ein Dokument zu bekommen, ändern/einfügen/löschen Sie einige Felder und legen Sie es zurück. Die "put" Aktion erfordert die aktuelle Revision des Dokuments, aber in Nano kann ich keine Funktion finden, die eine Revision als Parameter nimmt und das Dokument wieder in die Datenbank einfügt.Aktualisieren eines CouchDB-Dokuments in Nano

Wie kann ich das mit Nano machen?

Antwort

7

Hinweis: Dies ist der allgemeine Algorithmus, der für keine Bibliothek spezifisch ist, da die Methode nano's insert() keine automatische Aktualisierung von Dokumenten bietet.

Holen Sie das Dokument, speichern Sie die aktuelle Revision, wenden Sie Ihre Änderungen an und versuchen Sie, das Dokument mit der gespeicherten Revisionsnummer zu senden.

Stellen Sie sicher, dass 409 Konfliktreaktionen behandelt werden, die auftreten, wenn ein Dokument in der Zwischenzeit geändert wurde.

In diesem Fall sollten Sie das Dokument erneut abrufen, die Revisionsnummer speichern, Ihre Änderungen erneut anwenden und dann versuchen, es erneut mit der neuen Revision zu senden.

So, hier ist der Algorithmus:

  1. Get Dokument
  2. Speichern Sie die _rev
  3. Änderungen über
  4. Versuchen aktualisiertes Dokument mit gespeicherten _rev senden
  5. Go 1 bei dem Schritt von a 409

Bezahlen Sie die CouchDB HTTP Document API's PUT section und CouchDB Replication and Conflicts Wiki-Seite für weitere Informationen zu diesem Thema. Sie können auch How To Update A Document With Nano (The CouchDB Client for Node.js) hilfreich finden.

+0

Ich weiß, dass ich Revision brauche. Frage ist was ist Funktion mit "Revision" Argument in Nano. Richtige Antwort, aber auf eine andere Frage. – DSblizzard

+1

Es ist die richtige Antwort auch für Ihre Frage. Lesen Sie die Dokumentation zu [nano's Document API] (https://github.com/dscape/nano#document-functions). Es gibt nur eine 'inser()' Methode, was bedeutet, dass Sie die richtige Revision für das Dokument, das Sie einfügen möchten, einstellen müssen. –

+0

Können Sie den Code bitte anzeigen? – DSblizzard