我不小心从mongo数据库中删除了所有数据库。然后,我尝试在新数据库中插入文档。它将引发错误“由于缺少会话事务集合而无法保持事务状态。这表明config.transactions集合已被手动删除。”
我的示例代码:
doc_client = MongoClient(host=host,
port=port,
connect=True, # Connect on first operation to avoid multi-threading related errors
j=True, # Requests only return once write has hit the DB journal
)
print(doc_client.database_names()) # It works fine
doc_client['test'].insert({'a': 'ss'}) # Throws Error
答案 0 :(得分:1)
我不小心从mongo数据库中删除了所有数据库
您可能已经删除了config.transactions个收藏夹。这是内部使用的集合,该集合存储用于支持副本集和分片群集的retryable writes的记录。另请参见Config Databases。
自MongoDB v3.6 +起,用户将无法从mongo shell中删除副本集中的config
数据库。尽管如果在v3.6之前使用mongo
Shell进行连接,您仍然可以这样做,但是请确保升级Shell以使其与服务器版本匹配。
“由于缺少会话事务集合,因此无法保留事务状态。这表明config.transactions集合已被手动删除。”
您可以在主节点上手动重新创建集合:
use config
db.createCollection("transactions");
或者,副本集选择也会自动重新创建它。这是因为创建config.transactions
集合是副本集节点提升的一部分。 session_catalog_mongod.cpp#L156
新的config.transactions
集合将在主节点完成追赶阶段后复制到辅助节点。