Navigation

Read Concern "local"

A query with read concern "local" returns data from the instance with no guarantee that the data has been written to a majority of the replica set members (i.e. may be rolled back).

Read concern "local" is the default for:

Regardless of the read concern level, the most recent data on a node may not reflect the most recent version of the data in the system.

Causally Consistent Sessions

Read concern local is available for use with causally consistent sessions.

Read Concern "local" and Transactions

In MongoDB 4.0, all multi-documents transactions have snapshot isolation. In future versions of MongoDB, the server will optimize around your specified read concern (isolation level).

For "local" and "majority" read concern, MongoDB may provide stronger isolation guarantees than specified. If stronger guarantees are needed, be explicit as future versions of the server may include optimizations that remove stronger isolation guarantees than explicitly specified.

Note

You set the read concern at the transaction level, not at the individual operation level. To set the read concern for transactions, see Transaction Options (Read Concern/Write Concern).

Example

Consider the following timeline of a write operation Write0 to a three member replica set:

Note

For simplification, the example assumes:

  • All writes prior to Write0 have been successfully replicated to all members.
  • Writeprev is the previous write before Write0.
  • No other writes have occured after Write0.
Timeline of a write operation to a three member replica set.
Time Event Most Recent Write Most Recent w: “majority” write
t0 Primary applies Write0
Primary: Write0
Secondary1: Writeprev
Secondary2: Writeprev
Primary: Writeprev
Secondary1: Writeprev
Secondary2: Writeprev
t1 Secondary1 applies write0
Primary: Write0
Secondary1: Write0
Secondary2: Writeprev
Primary: Writeprev
Secondary1: Writeprev
Secondary2: Writeprev
t2 Secondary2 applies write0
Primary: Write0
Secondary1: Write0
Secondary2: Write0
Primary: Writeprev
Secondary1: Writeprev
Secondary2: Writeprev
t3 Primary is aware of successful replication to Secondary1 and sends acknowledgement to client
Primary: Write0
Secondary1: Write0
Secondary2: Write0
Primary: Write0
Secondary1: Writeprev
Secondary2: Writeprev
t4 Primary is aware of successful replication to Secondary2
Primary: Write0
Secondary1: Write0
Secondary2: Write0
Primary: Write0
Secondary1: Writeprev
Secondary2: Writeprev
t5 Secondary1 receives notice (through regular replication mechanism) to update its snapshot of its most recent w: “majority” write
Primary: Write0
Secondary1: Write0
Secondary2: Write0
Primary: Write0
Secondary1: Write0
Secondary2: Writeprev
t6 Secondary2 receives notice (through regular replication mechanism) to update its snapshot of its most recent w: “majority” write
Primary: Write0
Secondary1: Write0
Secondary2: Write0
Primary: Write0
Secondary1: Write0
Secondary2: Write0

Then, the following tables summarizes the state of the data that a read operation with "local" read concern would see at time T.

Timeline of a write operation to a three member replica set.
Read Target Time T State of Data
Primary After t0 Data reflects Write0.
Secondary1 Before t1 Data reflects Writeprev
Secondary1 After t1 Data reflects Write0
Secondary2 Before t2 Data reflects Writeprev
Secondary2 After t2 Data reflects Write0