Mongodb atlas X509 身份验证在事务中不起作用

Mongodb atlas X509 auth doesn't work in transaction

使用 X509 证书的 Mongo Atlas 有一个奇怪的问题。 我连接到 Mongo Atlas usign X509 证书没有问题,但是,当我尝试将它用于事务时,我收到用户未通过身份验证的错误。 这是我的代码:

    const mongoOptions = {
        authSource: "$external",
        useNewUrlParser: true,
        useUnifiedTopology: true,
        sslCert: credentials,
        sslKey: credentials,
        authMechanism: "MONGODB-X509"
    };
    const mongo = new MongoClient(process.env.MONGO_URI, mongoOptions);
    const connection = await mongo.connect();
    const session = mongo.startSession();
    const db = mongo.db(`configs_${configPrefix}`, {});
    try {
        await session.startTransaction();
        await db.collection(collection).updateOne({_id: id}, {$set: jsonData}, {upsert: true, session});
        await session.commitTransaction();
    } catch (e) {
        await session.abortTransaction();
    } finally {
        await session.endSession();
        await connection.close();
    }

如果我在 updateOne 中删除会话它会工作,如果我添加会话它会抛出错误。

如果我使用用户名和密码,它在所有情况下都有效。

我是否缺少任何限制或步骤?

谢谢

在客户端启用命令监控,记录所有命令,观察每个命令都包含连接ID。验证用于事务下命令的连接之前是否已通过身份验证。

在服务器上启用查询日志记录并在服务器上重复分析,验证每个执行 crud 的连接之前都经过身份验证。

经过与 atlas 支持的一些讨论和调查。他们确认这是他们共享集群(M0、M2、M5)中的一个错误。我可以确认它不会在 M10+ 中发生。