J'utilise "mongoose": "^5.7.1"
dans mon projet Node.js. Je fais une api qui implique la mise à jour dans deux documents. Donc, j'utilise les transactions comme suit:
// Start the transaction
session = await mongoose.startSession()
session.startTransaction()
await Promise.all([
<1st update operation>,
<2nd update operation>
])
// Commit the transaction
session.commitTransaction()
Lorsque je frappe cette API sur mon environnement local, j'obtiens l'erreur suivante:
MongoError: ce déploiement MongoDB ne prend pas en charge les écritures pouvant être réessayées. Veuillez ajouter retryWrites = false à votre chaîne de connexion.
Lorsque je frappe cette API sur un environnement distant, cela fonctionne bien. J'utilise https://www.clever-cloud.com comme cloud de base de données et AWS comme cloud api.
Comme écrit dans le message d'erreur, j'ai essayé de mettre retryWrites=false
- à la fin de la chaîne de connexion que je passe à mangouste
mongodb://${ip}:${port}/${this.MONGO_DATABASE}?retryWrites=false
- avec des options
retryWrites: false
transmises à lamongoose.connect
méthode.
mongoose.connect(`mongodb://${ip}:${port}/${this.MONGO_DATABASE}`, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
retryWrites: false
}, (err) => {...})
Aucune des réponses ci-dessus n'a résolu le problème.
Voici la sortie de la mongo --version
commande:
db version v4.0.13
git version: bda366f0b0e432ca143bc41da54d8732bd8d03c0
allocator: system
modules: none
build environment:
distarch: x86_64
target_arch: x86_64
J'ai débogué et je trouve que l'erreur réelle derrière le lancement de cette erreur est:
MongoError: les numéros de transaction ne sont autorisés que sur un membre de jeu de répliques ou des mongos
Veuillez suggérer quelque chose.