When I am using pymongo 3.7 transaction function to connect to mongo server 4.0, this error "Transaction numbers are only allowed on a replica set member or mongos" occurred and I cannot find any answer to solve this problem. My code is:
from pymongo import MongoClient
conn = MongoClient(host, port)
tb = conn.collector_gateway.try_table
with conn.start_session() as session:
with session.start_transaction():
tb.insert_one({"sku": "abc123", "qty": 100}, session=session)
The error is:
Traceback (most recent call last):
File "/Users/yuzgu/PycharmProjects/seller_loss_alert/try_mongo.py", line 22, in <module>
tb.insert_one({"sku": "abc123", "qty": 100}, session=session)
File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/collection.py", line 693, in insert_one
session=session),
File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/collection.py", line 607, in _insert
bypass_doc_val, session)
File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/collection.py", line 595, in _insert_one
acknowledged, _insert_command, session)
File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1243, in _retryable_write
return self._retry_with_session(retryable, func, s, None)
File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1196, in _retry_with_session
return func(session, sock_info, retryable)
File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/collection.py", line 590, in _insert_command
retryable_write=retryable_write)
File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/pool.py", line 579, in command
unacknowledged=unacknowledged)
File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/network.py", line 150, in command
parse_write_concern_error=parse_write_concern_error)
File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/helpers.py", line 155, in _check_command_response
raise OperationFailure(msg % errmsg, code, response)
pymongo.errors.OperationFailure: Transaction numbers are only allowed on a replica set member or mongos
Since mongo transaction function was published this year, I couldn't find the solution, can anyone help me with this problem?
A replica set in MongoDB is a group of mongod processes that maintain the same data set. Replica sets provide redundancy and high availability, and are the basis for all production deployments. This section introduces replication in MongoDB as well as the components and architecture of replica sets.
For situations that require atomicity of reads and writes to multiple documents (in a single or multiple collections), MongoDB supports multi-document transactions. With distributed transactions, transactions can be used across multiple operations, collections, databases, documents, and shards.
Transactions are only available in a replica set setup (https://docs.mongodb.com/master/core/transactions/#transactions-and-replica-sets):
Multi-document transactions are available for replica sets only.
This error message is shown when you are attempting to do a transactional operation on a standalone mongod
instance.
Please see Transactions page for more details & requirements.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With