Skip to main content

Changes API: How to Subscribe to Document Changes

Following methods allow you to subscribe to document changes:

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

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

DocumentChangeTypes

NameValue
None0
Put1
Delete2
BulkInsertStarted4
BulkInsertEnded8
BulkInsertError16
DeleteOnTombstoneReplication32
Conflict64
CommonPut & Delete

Remarks

To get more method overloads, especially ones supporting delegates, please add the System.Reactive.Core package to your project.