>我有"用户"文档,数组名为"订单"。每个订单都有"标题"、"日期"、"费用"等属性。我想计算数据库中每个用户的每笔订单费用的总和。
这是地图函数:
map: function(doc) {
if (doc.Doc_type && doc.Doc_type === 'user' && doc.Orders) {
for (var i = 0; i < doc.Orders.length; i++) {
emit([doc.Orders[i].Order_date], doc.Orders[i].Fee);
}
}
}
和减少功能:
reduce: function (keys, values, rereduce){
var sum = 0;
for(var i=0,fee;fee=values[i];i++){
sum+=fee;
}
return {
Transactions: sum,
Revenue: 10
};
}
我得到的结果是:
{"Transactions":"0[object Object][object Object]","Revenue":10}}
为简单起见,我不使用您的特定数据结构,但名称应该是不言自明的。
为每个订单发出键/值对 :username/:fee(也许您必须将其解析为整数/浮点数),就像您在代码(映射)中所做的那样:
for(every_order) {
emit(username, fee)
}
您将为索引中的每个用户名获得 1 个或多个订单行。如果您请求带有?key=":username"
的视图,您将获得响应结果数组中的所有订单行。现在,您可以总结客户端的费用,例如在浏览器中,或者 - 按照您的要求 - 使用内置的reduce功能在服务器端执行相同的
_sum
每个用户名您将获得一行,订单费用总额为价值。