On Thu, Apr 16, 2009 at 09:21:59AM -0700, Adam Wolff wrote: > So we've got docs that look like this: > { > type: "key_doc", > _id : "xyzzy", > key : "doc_key", > updated : 1239896906303 > } > > and docs that look like this: > { > type: "ref_doc", > key_doc_id : "xyzzy", > updated : 1239897055080 > } > > and we want a view that we query like this: > startkey : ["doc_key",null], endkey : ["doc_key",{}] Not sure if this is exactly what you want, but maybe try something along these lines: // MAP function(doc) { var type = doc['type']; switch(type) { case 'key_doc': if (doc.key && doc.updated) { emit(doc.key, doc.updated); } break; case 'ref_doc': if (doc.key_doc_id && doc.updated) { emit(key_doc_id, doc.updated); } } } Then your startkey..endkey view will show all update timestamps referring to this document. Here are some other tricks you could try: * emit(..., -updated) Then a limit=1 query should give you the (negated) most recent timestamp * use a reduce function to find the maximum updated timestamp. I came across an example recently of how to do that, but can't remember exactly where. It also showed how to reduce both the max and min values simultaneously. > which reduces to the key_doc ids that were updated since the startkey > date, in order, e.g. > ["xyzzy"] in this case Maybe you want to emit(updated, doc.key) instead, so you can query your view for all changes made after a particular time. Then it's easy on the client side to do a uniq on all the doc refs seen. Regards, Brian.