Skip to main content

Changes API: How to Subscribe to Document Changes

Subscribe to document changes using ForDocument, ForDocumentsInCollection, ForDocumentsStartingWith, or ForAllDocuments.

The Subscribe method on the observable these methods return accepts only an IObserver object by default.
To instead subscribe with a delegate, like the change => ... lambda used in the examples below, add the System.Reactive package to your project.
This adds Subscribe overloads that take delegates, including ones with error and completion handlers.

ForDocument​

Single document changes can be observed using ForDocument method.

Syntax​

IChangesObservable<DocumentChange> ForDocument(string docId);

Parameters
docIdstringID of a document for which notifications will be processed.
Return Value
IChangesObservable<DocumentChange>Observable that allows to add subscriptions to notifications for given document.

Example​

IDisposable subscription = store
.Changes()
.ForDocument("employees/1")
.Subscribe(
change =>
{
switch (change.Type)
{
case DocumentChangeTypes.Put:
// do something
break;
case DocumentChangeTypes.Delete:
// do something
break;
}
});

ForDocumentsInCollection​

To observe all document changes in particular collection use ForDocumentInCollection method. This method filters documents by @collection metadata property value.

Syntax​

IChangesObservable<DocumentChange> ForDocumentsInCollection(string collectionName);

IChangesObservable<DocumentChange> ForDocumentsInCollection<TEntity>();

Parameters
collectionNamestringName of document collection for which notifications will be processed.
Return Value
IChangesObservable<DocumentChange>Observable that allows to add subscriptions to notifications for given document collection name.

Overload with TEntity type uses Conventions.GetCollectionName to get collection name.

Example​

IDisposable subscription = store
.Changes()
.ForDocumentsInCollection<Employee>()
.Subscribe(change => Console.WriteLine("{0} on document {1}", change.Type, change.Id));

or

string collectionName = store.Conventions.FindCollectionName(typeof(Employee));
IDisposable subscription = store
.Changes()
.ForDocumentsInCollection(collectionName)
.Subscribe(change => Console.WriteLine("{0} on document {1}", change.Type, change.Id));

ForDocumentsStartingWith​

To observe all document changes for documents with ID that contains given prefix use ForDocumentsStartingWith method.

Syntax​

IChangesObservable<DocumentChange> ForDocumentsStartingWith(string docIdPrefix);

Parameters
docIdPrefixstringDocument ID prefix for which notifications will be processed.
Return Value
IChangesObservable<DocumentChange>Observable that allows to add subscriptions to notifications for given document ID prefix.

Example​

IDisposable subscription = store
.Changes()
.ForDocumentsStartingWith("employees/1") // employees/1, employees/10, employees/11, etc.
.Subscribe(change => Console.WriteLine("{0} on document {1}", change.Type, change.Id));

ForAllDocuments​

To observe all document changes use ForAllDocuments method.

Syntax​

IChangesObservable<DocumentChange> ForAllDocuments();

Return Value
IChangesObservable<DocumentChange>Observable that allows to add subscriptions to notifications for all documents.

Example​

IDisposable subscription = store
.Changes()
.ForAllDocuments() // employees/1, orders/1, customers/1, etc.
.Subscribe(change => Console.WriteLine("{0} on document {1}", change.Type, change.Id));

DocumentChange and DocumentChangeTypes syntax​

The notification object delivered to subscribers when a document changes.

class DocumentChange
{
DocumentChangeTypes Type
string Id
string CollectionName
string ChangeVector
}

PropertyTypeDescription
TypeDocumentChangeTypesDocument change type enum
IdstringDocument identifier
CollectionNamestringDocument's collection name
ChangeVectorstringDocument's ChangeVector

In this article