gpt4 book ai didi

mapreduce - CouchDB View - 将重复的键值减少/分组到数组

转载 作者:行者123 更新时间:2023-12-03 19:30:35 28 4
gpt4 key购买 nike

我在我的 couch db 上有一个 View ,它以这种格式输出数据:

{"rows":[
{"key":["Partner1","Voucher Type 1"],"value":true},
{"key":["Partner1","Voucher Type 2"],"value":true},
{"key":["Partner2","Voucher Type 1"],"value":true},
{"key":["Partner3","Voucher Type 1"],"value":true},
{"key":["Partner4","Voucher Type 1"],"value":true}
]}

我想要做的是有效地“分组”合作伙伴 |凭证类型,所以在上面的例子中,它会返回类似这样的东西:

Partner1: ["Voucher Type 1", "Voucher Type 2"]
Partner2: ["Voucher Type 1"]
Partner3: ["Voucher Type 1"]
Partner4: ["Voucher Type 1"]

目前,我的 map reduce 函数如下所示:

map :

function(
emit([doc.PartnerName, doc.VoucherType], 1);
}

减少:

function(keys, values) {
return true;
}

我正在使用 group=true 进行查询

我怀疑我需要在 reduce 函数中做更多的事情?

最佳答案

你的目的不是减少数据量,只是改变格式。所以不要使用 reduce 函数,使用 list function .

function(head, req) {
var lastKey, row, dedup;

while (row = getRow()) {
if (row.key !== lastKey) {
dedup = {};
send('\n' + row.key + ': ');
}

if (!dedup[row.value]) {
if (row.key === lastKey) {
send(', ');
}

dedup[row.value] = true;
send(row.value);
}

lastKey = row.key;
}
}

这只是给你一个纯文本列表,但你可以添加你想要的任何格式,例如JSON.

Partner1: Voucher Type 1, Voucher Type 2
Partner2: Voucher Type 1

如果不需要去重,那就更简单了。

关于mapreduce - CouchDB View - 将重复的键值减少/分组到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16299327/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com