Operations: Counters: How to Get Counters

This operation is used to get counters values for a specific document.
Can be used to get a single counter value, multiple counters values or all counters values.

Syntax

Get Single Counter

public GetCountersOperation(String docId, String counter)
public GetCountersOperation(String docId, String counter, boolean returnFullResults)
Parameters
docId String The ID of the document that holds the counters
counter String The name of the counter to get
returnFullResults boolean A flag which indicates if the operation should include a dictionary of counter values per database node in the result

Return Full Results flag

If RavenDB is running in a distributed cluster, and the database resides on several nodes, a counter can have a different local value on each database node, and the total counter value is the sum of all the local values of this counter from each node.
In order to get the counter values per database node, set the returnFullResults flag to true

Get Multiple Counters

public GetCountersOperation(String docId, String[] counters)
public GetCountersOperation(String docId, String[] counters, boolean returnFullResults)
Parameters
docId String The ID of the document that holds the counters
counters String[] The names of the counters to get
returnFullResults boolean A flag which indicates if the operation should include a dictionary of counter values per database node in the result

Get All Counters of a Document

public GetCountersOperation(String docId)
public GetCountersOperation(String docId, boolean returnFullResults)
Parameters
docId String The ID of the document that holds the counters
returnFullResults boolean A flag which indicates if the operation should include a dictionary of counter values per database node in the result

Return Value

The operation returns a CountersDetail object, which holds a list of CounterDetail objects

public class CountersDetail {

    private List<CounterDetail> counters;

    // getters and setters
}

public class CounterDetail {
    private String documentId; // ID of the document that holds the counter
    private String counterName; // The counter name
    private long totalValue; // Total counter value
    private long etag; // Counter Etag
    private Map<String, Long> counterValues; // A map of counter values per database node

    private String changeVector; // Change vector of the counter

    // getters and setters
}

Examples

Assume we have a document "users/1" which holds 3 counters -
"likes", "dislikes" and "downloads" - with values 10, 20 and 30 (respectively)

Example #1 : Get single counter

CountersDetail operationResult = store.operations()
    .send(new GetCountersOperation("users/1", "likes"));

Result:

{
	"Counters": 
    [
		{
			"DocumentId" : "users/1",
			"CounterName" : "likes",
			"TotalValue" : 10,
			"CounterValues" : null
		}
	]
}

Example #2 : Get multiple counters

CountersDetail operationResult = store.operations()
    .send(new GetCountersOperation("users/1", new String[]{ "likes", "dislikes" }));

Result:

{
	"Counters": 
    [
		{
			"DocumentId" : "users/1",
			"CounterName" : "likes",
			"TotalValue" : 10,
			"CounterValues" : null
		},
        {
			"DocumentId" : "users/1",
			"CounterName" : "dislikes",
			"TotalValue" : 20,
			"CounterValues" : null
		}
	]
}

Example #3 : Get all counters

CountersDetail operationResult = store.operations()
    .send(new GetCountersOperation("users/1"));

Result:

{
	"Counters": 
    [
		{
			"DocumentId" : "users/1",
			"CounterName" : "likes",
			"TotalValue" : 10,
			"CounterValues" : null
		},
        {
			"DocumentId" : "users/1",
			"CounterName" : "dislikes",
			"TotalValue" : 20,
			"CounterValues" : null
		},
        {
			"DocumentId" : "users/1",
			"CounterName" : "downloads",
			"TotalValue" : 30,
			"CounterValues" : null
		}
	]
}

Example #4 : Include full values in the result

CountersDetail operationResult = store.operations()
    .send(new GetCountersOperation("users/1", "likes", true));

Result:

{
	"Counters": 
    [
		{
			"DocumentId" : "users/1",
			"CounterName" : "likes",
			"TotalValue" : 10,
			"CounterValues" : 
            {
                "A:35-UuCp420vs0u+URADcGVURA" : 5,
                "B:83-SeCFU29daUOxfjUcAlLiJw" : 3,
                "C:27-7i7GP8bOOkGYLNflO/rSeg" : 2,
            }
		}
	]
}