9 Advanced capabilities

 

This chapter covers

  • Getting more of your queries
  • Documents metadata
  • Being notified from the client when data changes on the server
  • Streaming unlimited number of documents from RavenDB
  • Server-side updates via commands and scripts

We are about to wrap-up our journey learning RavenDB. By now you should have everything you need to start building pretty much any type of application with RavenDB as its backing store.

There are only two bits remaining. The first is a discussion on how to deploy and manage a RavenDB server instance. This is our topic for the next chapter, the last one in the book.

The other thing that we still have to look at is a collection of functionalities and capabilities of RavenDB we haven’t had the place or time to look at yet. This is what we are going to do in this chapter.

Each individual topic discussed here can be discussed in great length, much more than this chapter can allow for. So instead of dropping those topics completely I chose to discuss them in short, and group them in one “garage” chapter.

9.1   Advanced querying

In previous chapters we talked about RavenDB indexes at length. We saw how they operate on data, and how they use Lucene and Map/Reduce functions to map document properties and results of aggregation operations into searchable indices.

9.1.1   The Avanced.DocumentQuery API

9.1.2   Plan for effective client caching

9.1.3   Lazy operations

9.1.4   Query intersection

9.2   Working with documents metadata

9.2.1   Reading document metadata

9.2.2   Querying on metadata

9.2.3   Manipulating metadata

9.3   The DocumentStore conventions

9.3.1   The identity property locator

9.3.2   Collection name resolution

9.3.3   Custom document key generation

9.3.4   Advanced serialization and deserialization

9.4   The changes API

9.4.1   Subscribing and unsubscribing to notifications

9.5   Unbounded results set

9.6   Performing server-side updates

9.6.1   Patching

9.6.2   Scripted patching

9.6.3   Set-based operations

9.7   Summary

9.7.1   Leveraging aggressive caching