Ich verwende "mongoose": "^5.7.1"
in meinem Node.js-Projekt. Ich mache eine API, die das Aktualisieren in zwei Dokumenten beinhaltet. Daher verwende ich die Transaktionen wie folgt:
// Start the transaction
session = await mongoose.startSession()
session.startTransaction()
await Promise.all([
<1st update operation>,
<2nd update operation>
])
// Commit the transaction
session.commitTransaction()
Wenn ich diese API in meiner lokalen Umgebung drücke, wird folgende Fehlermeldung angezeigt:
MongoError: Diese MongoDB-Bereitstellung unterstützt keine wiederholbaren Schreibvorgänge. Bitte fügen Sie Ihrer Verbindungszeichenfolge retryWrites = false hinzu.
Wenn ich diese API in einer Remote-Umgebung drücke, läuft sie einwandfrei. Ich verwende https://www.clever-cloud.com als Datenbank-Cloud und AWS als API-Cloud.
Wie in der Fehlermeldung geschrieben, habe ich versucht zu setzen retryWrites=false
- am Ende der Verbindungszeichenfolge, die ich als an Mungo weitergebe
mongodb://${ip}:${port}/${this.MONGO_DATABASE}?retryWrites=false
- mit Optionen,
retryWrites: false
die an diemongoose.connect
Methode übergeben wurden.
mongoose.connect(`mongodb://${ip}:${port}/${this.MONGO_DATABASE}`, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
retryWrites: false
}, (err) => {...})
Keiner der oben genannten Punkte hat das Problem behoben.
Unten ist die Ausgabe des mongo --version
Befehls:
db version v4.0.13
git version: bda366f0b0e432ca143bc41da54d8732bd8d03c0
allocator: system
modules: none
build environment:
distarch: x86_64
target_arch: x86_64
Ich habe debug und finde den tatsächlichen Fehler hinter dem Auslösen dieses Fehlers ist:
MongoError: Transaktionsnummern sind nur für ein Replikatsatzmitglied oder Mongos zulässig
Bitte schlagen Sie etwas vor.