Aktualizacja wbudowanego tablica w zasadzie składa się z dwóch etapów:
1. utworzyć zmodyfikowaną wersję całej tablicy. Istnieje wiele operacji, których można użyć do modyfikowania tablicy, i są one wymienione tutaj: http://www.rethinkdb.com/api/#js:document_manipulation-insert_at
W twoim przykładzie, jeśli wiesz, że dokument, który chcesz zaktualizować, jest drugim elementem tablicy, możesz napisać coś w rodzaju
oldArray.changeAt(1, oldArray.nth(1).merge({text: "new content"}))
wygenerować nową tablicę. 1 tutaj jest indeks drugiego elementu, ponieważ indeksy zaczynają się od 0. Jeśli nie znasz indeksu, możesz użyć funkcji indexesOf do wyszukania konkretnego wpisu w tablicy. Tutaj dzieje się wiele rzeczy: changeAt zastępuje element tablicy. Tutaj element w indeksie 1 zostaje zamieniony na wynik oldArray.nth (1) .merge ({text: "new content"}). W tej wartości najpierw wybieramy element, z którego chcemy oprzeć nasz nowy element, używając oldArray.nth (1). To daje nam obiekt JSON
{
"author": "Adder K.",
"text": "old content"
}
Korzystając scalania, możemy zastąpić pola tekstowego tego obiektu przez nową wartość.
2. Teraz, kiedy możemy zbudować nowy obiekt, musimy go przechowywać w oryginalnym wierszu. W tym celu korzystamy z aktualizacji i po prostu ustawiamy pole "komentarze" na nową tablicę. Możemy uzyskać dostęp do wartości starej tablicy w wierszu za pośrednictwem zmiennej r.row ReQL. Ogólnie zapytanie będzie wyglądać następująco:
r.table(...).get(...).update({
comments: r.row('comments').changeAt(1,
r.row('comments').nth(1).merge({text: "new content"}))
}).run(conn, callback)