Da http://wiki.apache.org/couchdb/Introduction_to_CouchDB_viewsbisogno di spiegazioni di couchdb ridurre funzione
La couchdb ridurre funzione è definita come
function (key, values, rereduce) { return sum(values); }
- chiave sarà una matrice i cui elementi sono matrici di forma [chiave , id]
- valori saranno una matrice dei valori emessi per il resp elementi rifrangenti a tasti
- cioè riducono ([[key1, ID1], [key2, ID2], [key3, ID3]], [valore1, valore2, value3], falso)
riscontrano difficoltà a capire quando/perché la matrice di chiavi conterrebbe valori chiave diversi. Se la matrice di chiavi contiene valori chiave diversi, come dovrei gestirli?
Ad esempio, si supponga che il mio database contenga movimenti tra gli account del modulo.
{"amount":100, "CreditAccount":"account_number", "DebitAccount":"account_number"}
Voglio una visione che dà l'equilibrio di un account.
La mia funzione mappa fa:
emit(doc.CreditAccount, doc.amount) emit(doc.DebitAccount, -doc.amount)
Il mio ridurre la funzione fa:
ritorno somma (valori);
Mi sembra di ottenere i risultati attesi, tuttavia non riesco a conciliarlo con la possibilità che la mia funzione di riduzione ottenga valori chiave diversi.
La mia funzione di riduzione dovrebbe raggruppare i valori chiave per primi? Che tipo di risultato dovrei tornare in quel caso?
Potete fare in modo di ottenere tutti i valori nel parametro chiave con lo stesso valore di chiave in questo caso? – Alan
Si * otterrà * tutti i valori nel risultato della query HTTP. In altre parole, il tuo saldo sarà corretto. Comunque tu ** non puoi ** contare su tutti i valori passati alla funzione 'reduce()' in un colpo solo. Questo è uno dei principali trade-off di CouchDB. – JasonSmith
In altre parole, la funzione che hai dichiarato funzionerà perché ** supponendo group = true ** si accumulerà sempre per un account. Quando viene avviato un altro account, il valore verrà reimpostato su 0 per te. – JasonSmith