Aggiornamento matrice incorporato comporta fondamentalmente due fasi:
1. Si crea una versione modificata del l'intero array. Esistono più operazioni che è possibile utilizzare per modificare un array e sono elencate qui: http://www.rethinkdb.com/api/#js:document_manipulation-insert_at
Nel tuo esempio, se sai che il documento che desideri aggiornare è il secondo elemento dell'array, devi scrivere qualcosa come
oldArray.changeAt(1, oldArray.nth(1).merge({text: "new content"}))
per generare il nuovo array. 1 qui è l'indice del secondo elemento, poiché gli indici iniziano con 0. Se non si conosce l'indice, è possibile utilizzare la funzione indexesOf per cercare una voce specifica nell'array. Molte cose stanno accadendo qui: changeAt sostituisce un elemento dell'array. Qui, l'elemento all'indice 1 è sostituito dal risultato di oldArray.nth (1) .merge ({text: "nuovo contenuto"}). In questo valore, per prima cosa selezioniamo l'elemento da cui vogliamo basare il nostro nuovo elemento, usando oldArray.nth (1). Questo ci dà l'oggetto JSON
{
"author": "Adder K.",
"text": "old content"
}
Utilizzando uniamo, possiamo sostituire il campo di testo di questo oggetto dal nuovo valore.
2. Ora che possiamo costruire il nuovo oggetto, dobbiamo ancora memorizzarlo nella riga originale. Per questo, usiamo l'aggiornamento e basta impostare il campo "commenti" sul nuovo array. Possiamo accedere al valore della vecchia matrice nella riga attraverso la variabile re.row di ReQL. Complessivamente, la query avrà il seguente aspetto:
r.table(...).get(...).update({
comments: r.row('comments').changeAt(1,
r.row('comments').nth(1).merge({text: "new content"}))
}).run(conn, callback)
fonte
2013-06-16 15:45:32