see on GitHub

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
docId string ID 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 subscribtion = 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
collectionName string Name 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.

Information

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

Example

IDisposable subscribtion = 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 subscribtion = 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
docIdPrefix string Document 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 subscribtion = 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 subscribtion = store
    .Changes()
    .ForAllDocuments() // employees/1, orders/1, customers/1, etc.
    .Subscribe(change => Console.WriteLine("{0} on document {1}", change.Type, change.Id));

DocumentChange

Name Type Description
Type DocumentChangeTypes Document change type enum
Id string Document identifier
CollectionName string Document's collection name
TypeName string Type name
ChangeVector string Document's ChangeVector

DocumentChangeTypes

Name Value
None 0
Put 1
Delete 2
BulkInsertStarted 4
BulkInsertEnded 8
BulkInsertError 16
DeleteOnTombstoneReplication 32
Conflict 64
Common Put & Delete

Remarks

Information

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