Couchdb新手。
好吧,我有这样的文档
id: x
type: project,
propertyId: y
items: [{
spent: 10
budget: 20
quantity: 1
},
{
spent: 20
budget: 40
quantity: 1
}
]
我想算出按物业ID分组的总花费百分比,
{key: y, percent: 0.5}
此刻我有两种看法
//花费的财产
map: function(doc) {
if (
doc.type === "project" &&
doc.propertyId &&
doc.status === "active"
) {
var spent = Object.values(doc.items).reduce(function(total, item) {
return total + item.spent
}, 0)
emit([doc.propertyId, doc._id], spent)
}
}.toString(),
reduce: "_sum"
//财产预算
map: function(doc) {
if (
doc.type === "project" &&
doc.propertyId &&
doc.status === "active"
) {
var budget = Object.values(doc.items).reduce(function(total, item) {
const qty = item.quantity || 1
const budget = item.budget || 0
return total + budget * qty
}, 0)
emit([doc.propertyId, doc._id], budget)
}
}.toString(),
reduce: "_sum"
然后我从客户应用程序中调用两者,并计算我的应用程序中的百分比。
我想知道如何在一次通话中完成此操作
这样我的地图函数看起来就像
map: function(doc) {
if (doc.type === "project" && doc.propertyId) {
const totals = Object.values(doc.items).reduce(
function(total, item) {
return {
budget: total.budget + item.budget * item.qty,
spent: total.budget + item.spent
}
},
{ budget: 0, spent: 0 }
)
emit([doc.propertyId, doc._id], totals)
}
}
reduce: function(keys, values, rereduce) {
const sum = values.reduce(
function(sum, total) {
return {
spent: sum.spent + total.spent,
budget: sum.budget + total.budget
}
},
{ spent: 0, budget: 0 }
)
return sum.budget ? sum.spent / sum.budget : 0
但这根本不能给出正确的结果