Built-in reduces
While you can define your own reduce functions, it's often the case that your reduce is going to be doing a simple count or sum operation. There are a handful of built in reduce functions;_sum
, _count
and _stats
. If you
can use these functions you should - they're faster than a javascript
reduce (since they avoid serialisation between erlang and javascript) and are
very well tested._sum
- Produces the sum of all values for a key, values must be numeric
_count
- Produces the row count for a given key, values can be any valid json
_stats
- Produces a json structure containing sum, count, min, max and sum squared, values must be numeric
{ "_id": "_design/views103", "_rev": "8-1798b34c9929eb36d3bc04f99d2b5445", "indexes": { "animals": { "index": "function(doc){\n index(\"default\", doc._id);\n\n if (doc['customerID']){\n index(\"customerID\", doc['customerID'], {\"store\": \"yes\"});\n }\n\n if (doc['trxnStatus']){\n index(\"trxnStatus\", doc['trxnStatus'], {\"store\": \"yes\"});\n }\n\n if (doc['createdStamp']){\n index(\"createdStamp\", doc['createdStamp'], {\"store\": \"yes\"});\n }\n\n if (doc['paymentType']){\n index(\"paymentType\", doc['paymentType'], {\"store\": \"yes\"});\n }\n\n if (doc['returnAmount']){\n index(\"returnAmount\", doc['returnAmount'], {\"store\": \"yes\"});\n }\n\n if (doc['trxnNumber']){\n index(\"trxnNumber\", doc['trxnNumber'], {\"store\": \"yes\"});\n }\n\n if (doc['trxnReference']){\n index(\"trxnReference\", doc['trxnReference'], {\"store\": \"yes\"});\n }\n\n if (doc['authCode']){\n index(\"authCode\", doc['authCode'], {\"store\": \"yes\"});\n }\n\n }" } }, "views": { "returnAmount_sum": { "map": "function(doc) {\n if(doc.returnAmount && doc.customerID){\n emit(doc.customerID, doc.returnAmount);\n }\n}", "reduce": "function (keys, values, rereduce) {\nreturn (values);\n}" } } }
https://cloudant.com/for-developers/views/#pageArea
{
"_id": "_design/name",
"views": {
"view1": {
"map":"function(doc){emit(doc.field, 1)}",
"reduce": "function(key, value, rereduce){return sum(values)}"
}
}
}