Details
-
New Feature
-
Status: Closed
-
Major
-
Resolution: Won't Fix
-
None
-
None
-
None
-
Committers Level (Medium to Hard)
Description
Unless I manually copy the JSON rows of a view into a new document, I am unable to create new views that are computed from existing views. That is, it seems as if views are second class citizens compared to first-class documents.
Suppose I wanted to find the spread between the cheapest suppliers and the most expensive suppliers of each fruit. I know it's possible to use one map/reduce to compute such a view, but I'd like to be able to re-use my existing "cheapest" and "costliest" views. That is, I'd like to use the document output of these views as input into another view.
I started with the simple fruit store example in the CouchDB book. I developed a simple view called "cheapest" with the following map and reduce functions (the "costliest" view is the same as "cheapest" but except the reduce function's comparison is the other way around):
function(doc) {
var store, price, key;
if (doc.item && doc.prices) {
for (store in doc.prices) {
price = doc.prices[store];
key = doc.item;
emit(key,
);
}
}
}
function(item,store) {
var m = store[0];
for (i in store)
return m;
}
The output is as follows:
{"rows":[
{"key":"apple","value":{"store":"Apples Express","price":0.79}},
{"key":"banana","value":{"store":"Price Max","price":079}},
{"key":"orange","value":{"store":"Citrus Circus","price":1.09}}
]}
I'd like to develop a new view whose input is the output of the view above, but as far as I can tell, views only operate on documents, not the output of existing views. Am I missing something?