我们正试图在MongoDB 4.0中实现ACID交易功能,以满足我们对独立MongoDB服务器的应用程序要求,但我们在Mongo Shell中面临以下代码片段的问题。
var session1 = db.getMongo().startSession();
var session1PersonColl = session1.getDatabase('test').getCollection('person');
session1.startTransaction({readConcern: {level: 'snapshot'}, writeConcern: {w: 'majority'}});
session1PersonColl.insert({"_id": 3, "fname": "fname-3", "lname": "lname-3"});
错误:
WriteCommandError({ “ ok”:0, “ errmsg”:“交易编号仅允许在副本集成员或mong os上使用”, “代码”:20, “ codeName”:“ IllegalOperation”
注意:当mongod实例以副本集启动时,相同的代码片段可以正常工作
请告知我们是否有任何方法可以在不设置副本副本的情况下执行此操作
答案 0 :(得分:1)
从版本4.0开始,MongoDB提供了对副本集执行多文档事务的功能。
所以我想您确实需要一个副本集来支持事务。
这里是另一个piece of information:
多文档事务仅适用于副本集部署。您甚至可以在独立服务器上使用事务,但您需要将其配置为副本集(只有一个节点)