In this guide, you can learn how to use the write concern, read concern, and read preference configurations to modify the way that MongoDB runs create, read, update, and delete (CRUD) operations on replica sets.
You can set write concern, read concern, and read preference options at the following levels:
Client, which sets the default for all operation executions unless overridden
Session
Transaction
Database
Collection
The preceding list also indicates the increasing order of precedence of the option settings. For example, if you set a read concern level for a transaction, it will override a read concern level set for the client.
These options allow you to customize the causal consistency and availability of the data in your replica sets.
The write concern specifies the level of acknowledgement requested from MongoDB for write operations, such as an insert or update, before the operation successfully returns. Operations that do not specify an explicit write concern inherit the global default write concern settings.
For more information, see Write Concern in the MongoDB Server manual. For detailed API documentation, see the Write Concern API documentation.
The following table describes the write_concern
parameters:
Parameter
Type
Description
w
(optional)
integer or string
Requests acknowledgment that the write operation has propagated to a specified number of mongod
instances or to mongod
instances that are labelled with specified tags.
wtimeoutMS
(optional)
integer
Specifies a time limit to prevent write operations from blocking indefinitely.
journal
(optional)
boolean
Requests acknowledgment that the write operation has been written to the on-disk journal.
The following code creates a new document and specifies the w
and wtimeout
write concern settings:
client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'myDB')myDB = client.databasemyCollection = myDB[:myCollection]myCollection.insert_one( { name: 'anotherDocumentName' }, write: { w: 2, wtimeout: 5000 })
The following code uses the new_write_concern
method to construct a write_concern
from the options of an existing database reference, myDB
. Then the new write concern is applied to an inserted document.
myDoc = { name: 'New Document' }new_write_concern = Mongo::WriteConcern.get(myDB.write_concern)myDB[:myCollection].with(write: new_write_concern).insert_one(myDoc)
Note
myDB
can be replaced with a reference to any entity that accepts a write concern option.
The read concern specifies the following behaviors:
Level of causal consistency across replica sets
Isolation guarantees maintained during a query
You can specify the read concern setting by using the level
parameter. The default read concern level is local
. This means that the client returns the data from the replica set member that the client is connected to, with no guarantee that the data has been written to all replica set members.
Lower read concern level requirements may reduce latency.
For more information about read concerns or read concern levels, see Read Concern in the MongoDB Server manual. For more detail on the read_concern
type and definitions of the read concern levels, see Read Concern in the API documentation.
The following code sets the read concern level of an aggregation to "available"
:
pipeline = [ { "$match" => { category: 'KITCHENWARE' } }, { "$unset" => ['_id', 'category'] }]result = myCollection.aggregate(pipeline,read: { read_concern: { level: :available } })
The following code changes the read concern level of a database to "local"
:
client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'mydb', read_concern: { level: :local })myDB = client.database
The read preference determines which member of a replica set MongoDB reads when running a query.
For more detailed API documentation, see the Read Preference API documentation.
The following table shows options you can use to customize how the server evaluates members:
Parameter
Type
Description
mode
Symbol
Specifies a requirement or preference for which replica set member the server reads from. The default mode, :primary
, specifies that operations read from the primary member of the replica set.
tags
(optional)
Array<Hash>
Assigns tags to secondary replica set members to customize how the server evaluates them. Tags cannot be used with the :primary
read preference mode setting.
options
(optional)
Hash
Sets various options, including hedge and maxStalenessSeconds that can be applied to your read preference.
The following code sets the read preference, read concern, and write concern for the operations in a transaction:
transaction_options = { read: { mode: :primary }, read_concern: { level: :local }, write_concern: { w: :majority }}session = client.start_sessionsession.start_transaction(transaction_options)session.commit_transactionrescue => e session.abort_transaction puts "Transaction aborted due to an error: #{e.message}"ensure session.end_sessionend
Tip
To learn more about transactions, see the Transactions guide.
This code example creates a MongoClient
that uses the secondary
read preference mode when performing queries on a cluster:
uri = 'mongodb+srv://<user>:<password>@<cluster-url>'options = { read: { mode: :secondary, max_staleness: 120 }}client = Mongo::Client.new(uri, options)myDB = client.database
The preceding example also sets the maxStalenessSeconds
option to 120
. For more information about connection string options, see the Connection String Options section in the MongoDB Server manual.
To learn more about the methods and types mentioned in this guide, see the following API documentation:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4