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 | ||
|---|---|---|
| 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 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 | ||
|---|---|---|
| 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. |
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 | ||
|---|---|---|
| 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 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
- DocumentChange
- DocumentChangeTypes
The notification object delivered to subscribers when a document changes.
class DocumentChange
{
DocumentChangeTypes Type
string Id
string CollectionName
string ChangeVector
}
| Property | Type | Description |
|---|---|---|
| Type | DocumentChangeTypes | Document change type enum |
| Id | string | Document identifier |
| CollectionName | string | Document's collection name |
| ChangeVector | string | Document's ChangeVector |
enum DocumentChangeTypes
{
None,
Put,
Delete,
BulkInsertStarted,
BulkInsertEnded,
BulkInsertError,
DeleteOnTombstoneReplication,
Conflict,
Common,
}
| Name | Value |
|---|---|
| None | 0 |
| Put | 1 |
| Delete | 2 |
| BulkInsertStarted | 4 |
| BulkInsertEnded | 8 |
| BulkInsertError | 16 |
| DeleteOnTombstoneReplication | 32 |
| Conflict | 64 |
| Common | Put | Delete |