tags:

views:

57

answers:

1

I have a process which posts documents similar to the one below to CouchDB:

{"timestamp": [2010, 8, 4, 9, 25, 24], "type": "quote", "bid": 95.0, "offer": 96.5}

Many such documents are posted over the course of a day, each timestamped appropriately.

I want to create a CouchDB view which returns the last quote stored every day.

I've been reading the link below on how to create complex views

http://books.couchdb.org/relax/reference/views-for-sql-jockeys

but I have trouble seeing how to combine map and reduce functions to achieve the desired result [the map function is easy; it's the reduce function I'm having trouble with].

Any pointers gratefully received.

+1  A: 

Create a map-function that returns all documents for a given time period using the same key. For example, return all documents in the 17th hour of the day with key 17.

Create a reduce-function that emits only the latest bid for that hour. Your view will return 24 documents, and your client side code will do the final merge.

There are many ways to accomplish this. You can retrieve a single latest-bid by emitting from your map-function a single key and then reducing this by searching all bids, but I'm not sure how that will perform for extremely large sets, such as those you'd encounter with a bidding system.

Update

http://wiki.apache.org/couchdb/View_Snippets#Computing_simple_summary_statistics_.28min.2Cmax.2Cmean.2Cstandard_deviation.29

Noah Watkins