Uploaded image for project: 'CouchDB'
  1. CouchDB
  2. COUCHDB-249

Treat output rows of views as documents for other views to build upon

Details

    • 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,

      {store:store, price:price}

      );
      }
      }
      }

      function(item,store) {
      var m = store[0];
      for (i in store)

      { if (m.price > store[i].price) m = store[i]; }

      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?

      Attachments

        1. couch_view_updaer.erl.patch.txt
          7 kB
          Viacheslav Seledkin
        2. couch_view_updater.erl
          14 kB
          Viacheslav Seledkin

        Activity

          People

            Unassigned Unassigned
            lawrancj Joey Lawrance
            Votes:
            10 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment