Artificial documents are a really interesting feature. They allow you to define an index, and specify that the result of the index will be… documents as well.
Let us consider the following index, running on the Norhtwind dataset.
We can ask RavenDB to output the result of this index to a collection, in addition to the normal indexing. This is done in the following manner:
And you can see the result here:
The question here is, what is the point? Don’t we already have the exact same data indexed and available as the result of the map/reduce index? Why store it twice?
The answer is quite simple, with the output of the index going into documents, we can now define additional indexes on top of them, which give us the option to very easily create recursive map/reduce operations. So you can do daily/monthly/yearly summaries very cheaply. We can also apply all the usual operations on documents (subscriptions and ETL processes come to mind immediately). That give you a lot of power, and without incurring a high complexity overhead.