Couchdb 减少产品列表以仅显示最便宜的供应商
我正在使用的示例适用于以下设置:Couchdb 减少产品列表以仅显示最便宜的供应商,couchdb,Couchdb,我正在使用的示例适用于以下设置: curl -X PUT http://127.0.0.1:5984/demo curl -H 'Content-Type: application/json' -X POST http://127.0.0.1:5984/demo \ -d '{"item": "apple","prices": {"Fresh Mart": 1.59, "Price Max": 5.99,
curl -X PUT http://127.0.0.1:5984/demo
curl -H 'Content-Type: application/json' -X POST http://127.0.0.1:5984/demo \
-d '{"item": "apple","prices": {"Fresh Mart": 1.59,
"Price Max": 5.99,
"Apples Express": 0.79}}'
curl -H 'Content-Type: application/json' -X POST http://127.0.0.1:5984/demo \
-d '{"item": "orange","prices": {"Fresh Mart": 1.99,
"Price Max": 3.19,
"Citrus Circus": 1.09}}'
curl -H 'Content-Type: application/json' -X POST http://127.0.0.1:5984/demo \
-d '{"item": "banana","prices": {"Fresh Mart": 1.99,
"Price Max": 0.79,
"Banana Montana": 4.22}}'
它使用以下地图显示所有项目:
function(doc) {
var shop, price, key;
if (doc.item && doc.prices) {
for (shop in doc.prices) {
price = doc.prices[shop];
key = [doc.item, price];
emit(key, shop);
}
}
}
但它会多次显示所有项目:
如何编写一个reduce函数,只显示每种商品的最便宜供应商?我如何才能找到“在哪里可以买到最便宜的苹果?”问题的答案?reduce函数不是解决这个问题的合适工具。这个问题的答案是另一个map函数。以下映射函数执行此任务:
功能(doc){
风险值、价格、关键;
if(单据项和单据价格){
var最便宜=99999999;
var cheapestshop=null;
适用于(店内单据价格){
价格=单据价格[商店];
如果(价格<最便宜){
最便宜的=价格;
最便宜的商店;
}
}
排放([doc.item,最便宜的],最便宜的商店);
}
}