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,最便宜的],最便宜的商店);
}
}