我"mongoose": "^5.7.1"在我的 Node.js 项目中使用。我正在制作一个涉及更新两个文档的 api。所以,我正在使用如下交易:
// Start the transaction
session = await mongoose.startSession()
session.startTransaction()
await Promise.all([
<1st update operation>,
<2nd update operation>
])
// Commit the transaction
session.commitTransaction()
Run Code Online (Sandbox Code Playgroud)
当我在本地环境中点击此 api 时,出现以下错误:
MongoError:此 MongoDB 部署不支持可重试写入。请将 retryWrites=false 添加到您的连接字符串。
当我在远程环境中点击这个 api 时,它运行良好。我使用https://www.clever-cloud.com作为数据库云和 AWS 作为 api 云。
正如错误消息中所写,我试图把 retryWrites=false
mongodb://${ip}:${port}/${this.MONGO_DATABASE}?retryWrites=falseretryWrites: false传递给mongoose.connect方法的选项。mongoose.connect(`mongodb://${ip}:${port}/${this.MONGO_DATABASE}`, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
retryWrites: false
}, (err) => {...})
Run Code Online (Sandbox Code Playgroud)
以上都没有解决问题。
下面是mongo --version命令的输出:
db version v4.0.13
git …Run Code Online (Sandbox Code Playgroud) 我正在使用MongoDB Atlas cloud(https://cloud.mongodb.com/)和Mongoose库。
我尝试使用事务处理概念创建多个文档,但是它不起作用。我没有任何错误。但是,回滚似乎无法正常工作。
app.js
//*** more code here
var app = express();
require('./models/db');
//*** more code here
Run Code Online (Sandbox Code Playgroud)
模型/db.js
var mongoose = require( 'mongoose' );
// Build the connection string
var dbURI = 'mongodb+srv://mydb:pass@cluster0-****.mongodb.net/mydb?retryWrites=true';
// Create the database connection
mongoose.connect(dbURI, {
useCreateIndex: true,
useNewUrlParser: true,
});
// Get Mongoose to use the global promise library
mongoose.Promise = global.Promise;
Run Code Online (Sandbox Code Playgroud)
型号/user.js
const mongoose = require("mongoose");
const UserSchema = new mongoose.Schema({
userName: {
type: String,
required: true
},
pass: {
type: …Run Code Online (Sandbox Code Playgroud)