2012-07-26 20 views
6

Potrzebuję pobrać dokument, zmienić/wstawić/usunąć niektóre pola i odłożyć je.Aktualizowanie dokumentu CouchDB w nano

Operacja "wstaw" wymaga aktualnej wersji dokumentu, ale w nano nie mogę znaleźć żadnej funkcji, która pobiera poprawkę jako parametr i wstawi dokument z powrotem do bazy danych.

Jak mogę to zrobić z nano?

Odpowiedz

7

Uwaga: Jest to ogólny algorytm, nie jest specyficzny dla żadnej biblioteki, ponieważ metoda nano's insert() nie oferuje niczego zautomatyzowanego do aktualizacji dokumentów.

Pobierz dokument, zapisz bieżącą wersję, zastosuj zmiany i spróbuj wysłać dokument z zapisanym numerem wersji.

Pamiętaj, aby obsłużyć możliwe 409 odpowiedzi na konflikt, które występują, gdy dokument został zmieniony w międzyczasie.

W takim przypadku należy ponownie pobrać dokument, zapisać numer wersji, ponownie zastosować zmiany, a następnie spróbować wysłać ponownie z nową wersją.

Więc tutaj jest algorytm:

  1. dokument Get
  2. Zapisz _rev
  3. Zastosuj zmiany
  4. spróbuj wysłać uaktualniony dokument z zapisanym _rev
  5. przejdź do kroku 1. W razie a 409

Zamówienie na i strona wiki CouchDB Replication and Conflicts, aby uzyskać więcej informacji na ten temat. Pomocna może być także pomocna How To Update A Document With Nano (The CouchDB Client for Node.js).

+0

Wiem, że potrzebuję rewizji. Pytanie brzmi, co jest funkcją z argumentem "rewizji" w nano. Właściwa odpowiedź, ale na inne pytanie. – DSblizzard

+1

Jest to właściwa odpowiedź nawet na twoje pytanie. Przeczytaj dokumentację [Dokumentacja API nano] (https://github.com/dscape/nano#document-functions). Istnieje tylko metoda 'insert()', co oznacza, że ​​musisz ustawić poprawną wersję dokumentu, który chcesz wstawić. –

+0

Czy możesz pokazać kod? – DSblizzard