You can atomically increment or decrement the numerical value of special counter documents
counter(docid, value) counter(docid, -value)
A document may be used as a counter if its value is a simple ASCII number, like
Couchbase allows you to atomically increment and decrement these values using a special
The example below (in Python) shows how to use counters:
>>> cb.counter('counter_id', delta=20, initial=100).value 100L >>> cb.counter('counter_id', delta=1).value 101L >>> cb.counter('counter_id', delta=-50).value 51L
A counter can be created by using the
counter() function with an
The initial value is the value the counter uses if the counter ID does not yet exist.
Once created, the counter can be incremented or decremented atomically by a given amount or delta. Specifying a positive delta increments the value and specifying a negative one decrements it. When a counter operation is complete, the application receives the current value of the counter, after the increment.
Couchbase counters are 64-bit unsigned integers in Couchbase, and do not wrap around if decremented beyond 0, however they will wrap around if incremented past their maximum value (which is the maximum value contained within a 64 bit integer). Many SDKs will limit the delta argument to the value of a signed 64 bit integer.
Expiration times can also be specified when using counter operations.
CAS values are not used with counter operations since counter operations are atomic.
The intent of the counter operation is to simply increment the current server-side value of the document.
If you wish to only increment the document if it is at a certain value, then you may use a normal
upsert function with CAS:
rv = cb.get('counter_id') value, cas = rv.value, rv.cas if should_increment_value(value): cb.upsert('counter_id', value + increment_amount, cas=cas)