私は"mongoose": "^5.7.1"
Node.jsプロジェクトで使用しています。私は2つのドキュメントの更新を含むAPIを作成しています。だから、私は次のようなトランザクションを使用しています:
// Start the transaction
session = await mongoose.startSession()
session.startTransaction()
await Promise.all([
<1st update operation>,
<2nd update operation>
])
// Commit the transaction
session.commitTransaction()
ローカル環境でこのAPIをヒットすると、次のエラーが発生します。
MongoError:このMongoDBデプロイメントは、再試行可能な書き込みをサポートしていません。接続文字列にretryWrites = falseを追加してください。
リモート環境でこのAPIを実行すると、正常に実行されます。データベースクラウドとしてhttps://www.clever-cloud.comを、APIクラウドとしてAWS を使用しています。
エラーメッセージに書かれているように、 retryWrites=false
- 私がマングースに渡している接続文字列の最後に
mongodb://${ip}:${port}/${this.MONGO_DATABASE}?retryWrites=false
- メソッドに
retryWrites: false
渡されるオプションmongoose.connect
。
mongoose.connect(`mongodb://${ip}:${port}/${this.MONGO_DATABASE}`, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
retryWrites: false
}, (err) => {...})
上記のいずれも問題を解決しませんでした。
以下はmongo --version
コマンドの出力です:
db version v4.0.13
git version: bda366f0b0e432ca143bc41da54d8732bd8d03c0
allocator: system
modules: none
build environment:
distarch: x86_64
target_arch: x86_64
私はデバッグしていて、このエラーをスローする背後にある実際のエラーは次のとおりです:
MongoError:トランザクション番号は、レプリカセットメンバーまたはmongosでのみ許可されます
何か提案してください。