El ejemplo siguiente crea sus propias operaciones de combinación dentro de la función Reduce. Supongamos que tenemos una base de datos llena de recibos y queremos calcular el total gastado en un mes:
// este sería un recibo de ejemplo
{
"_id":"2DA92AAA628CB4156134F36927CF4876",
"type":"recibo"
"amount":19.95,
"note":"esto funcionara",
"year":2008,
"month":1,
"day":12,
....
"}
}
// a continuación la función Map
function (doc) {
if (doc.type == "recibo") {
var key = [doc.year, doc.month];
emit(key, doc.amount);
}
}
// y una función Reduce para calcular los totales de los recibos:
function (date, values) {
var result = {totalSpent:0, numPurchases:0};
for(var i=0; i<values.length; i++) {
switch (typeof values[i]) {
case "number":
result.totalSpent += values[i];
result.numPurchases++;
case "object":
// este es un objeto, y salida de una reducción anterior
result.totalSpent += values[i].totalSpent;
result.numPurchases += values[i].numPurchases;
}
}
return result;
}
// Una vez guardado en un documento de diseño, se pueden obtener los valores de Enero de 2008:
// GET /db/_view/receipts/amount_spent_month?key=[2008,1] //Resultado:
{"total_rows":12,
"rows":[
{ "key":[2008,1],
"value": { "totalSpent": 1252.1
"numPurchases": 13}
}
]
}
No hay comentarios:
Publicar un comentario