You are currently browsing legacy 4.1 version of documentation. Click here to switch to the newest 4.2 version.

We can help you with migration to the latest RavenDB

Contact Us Now
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

CleanCloseable subscription = store.changes()
    .forDocument("employees/1")
    .subscribe(Observers.create(change -> {
        switch (change.getType()) {
            case PUT:
                // do something
                break;
            case 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(Class<?> clazz);

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

CleanCloseable subscription = store
    .changes()
    .forDocumentsInCollection(Employee.class)
    .subscribe(Observers.create(change -> {
        System.out.println(change.getType() + " on document " + change.getId());
    }));

or

String collectionName = store.getConventions().getFindCollectionName().apply(Employee.class);
CleanCloseable subscription = store
    .changes()
    .forDocumentsInCollection(collectionName)
    .subscribe(Observers.create(change -> {
        System.out.println(change.getType() + " on document " + change.getId());
    }));

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

CleanCloseable subscription = store
    .changes()
    .forDocumentsStartingWith("employees/1") // employees/1, employees/10, employees/11, etc.
    .subscribe(Observers.create(change -> {
        System.out.println(change.getType() + " on document " + change.getId());
    }));

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

CleanCloseable subscription = store
    .changes()
    .forAllDocuments()
    .subscribe(Observers.create(change -> {
        System.out.println(change.getType() + " on document " + change.getId());
    }));

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
NONE
PUT
DELETE
BULK_INSERT_STARTED
BULK_INSERT_ENDED
BULK_INSERT_ERROR
DELETE_ON_TOMBSTONE_REPLICATION
CONFLICT
COMMON