首页 > 解决方案 > MongoDB retryWrites 设置代码不起作用

问题描述

现在,我正在尝试为 MongoDB 开发事务会话。

交易代码

        const session = await mongoose.startSession();
        session.startTransaction();
        try {
            const result = await storage.create([attachment], { session: session });
            await req.files.newFile.mv(attachment.filePath);
            await session.commitTransaction();
            return res.send(result);
        } catch (err) {
            console.log(err);
            await session.abortTransaction();
            return res.status(500).send(err);
        } finally {
            session.endSession();
        }

当我调用此代码时,它给了我以下错误消息。

MongoError:此 MongoDB 部署不支持可重试写入。请将 retryWrites=false 添加到您的连接字符串中。

因此,我在 mongoose 连接代码中添加了 retryWrites=false 代码。原样

const mongoose = require('mongoose');
mongoose.connect(process.env.MONGO_URI, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  poolSize: 10,
});

成为

const mongoose = require('mongoose');
mongoose.connect(process.env.MONGO_URI, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  retryWrites: false,
  poolSize: 10,
});

但我仍然有同样的问题......我不确定是什么问题。请 MongoDB 专家告诉我解决方案。

标签: node.jsmongodbmongoose

解决方案


有关事务要求,请参阅使用 MongoDB 事务的要求。您可能正在使用独立部署。


推荐阅读