当我使用pymongo 3.7事务功能连接到mongo服务器4.0时,出现此错误“仅允许在副本集成员或mongos上使用交易号”,并且找不到任何解决此问题的答案。 我的代码是:
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)
错误是:
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
自从mongo交易功能于今年发布以来,我找不到解决方案,有人可以帮助我解决这个问题吗?
答案 0 :(得分:4)
事务仅在副本集设置(https://docs.mongodb.com/master/core/transactions/#transactions-and-replica-sets)中可用:
多文档交易仅适用于副本集。
当您尝试在独立的mongod
实例上执行事务操作时,会显示此错误消息。
有关更多详细信息和要求,请参见Transactions页。