On Mon, Nov 23, 2009 at 08:58:04AM +1100, Mark Hammond wrote:
> Here your map function looks something like:
>
> emit([doc.author, doc.date], null);
>
> Your rows will then be returned, with the _id, in order of author and
> date. You could query like:
>
> startkey=["Tolstoj", 1985], endkey=["Tolstoj", 1999]
>
> To query a range of dates for a single author.
...
> Very similar:
>
> emit([doc.author, doc.date, doc.publisher], null);
>
> By using the group_level capability (see the wiki about the view API),
> you could still search just by author, by author and date, or by all 3
> fields.
And of course you could use this view for the first query as well. A query
for
startkey=["Tolstoj"]&endkey=["Tolstoj", {}]
will still find all the relevant rows - it's just that this time they will
be sorted by publisher and then _id, rather than just _id.
If you have a reduce function (e.g. which counts books), then using
group_level=2 would give you counts by author and year, independent of
publisher.