javascript node.js mongodb mongoose

javascript - ¿Qué es un TransientTransactionError en Mongoose(o MongoDB)?



node.js (11)

Entonces tengo dos archivos, uno es server.js y el otro es db.js El archivo db.js interactúa con mi db usando Mongoose y yo uso server.js para llamar a funciones desde db.js

db.js : var mongoose = require(''mongoose''); mongoose.connect('''', { useNewUrlParser: true }) var Schema = mongoose.Schema; module.exports = function () { var db = mongoose.connection; db.on(''error'', console.error.bind(console, ''connection error:'')); return db.once(''open'', function() { console.log("Connected to DB") var postschema = new Schema({ title: String, intro: String, body: String, author: String, timestamp: { type: Date, default: Date.now } }); var post = mongoose.model(''post'', postschema); return { newPost(title, intro, body, author) { var newpost = new post({ title: title, intro: intro, body: body, author: author }) }, getPostsAll() { post.find({}, function (err, res) { return (`Error:${err} Posts:${res}`) }) } } }) }

Y mi server.js llama tres funciones en total desde db.js que son

var DB = require(''./db.js'') var db = DB() db.getPostsAll() db.newPost()

No entiendo por qué estoy recibiendo este error:

connection error: { MongoNetworkError: connection 4 to black-test-shard-00-01-ewyaf.mongodb.net:27017 closed at TLSSocket.<anonymous> (E:/HTML/black-box/node_modules/mongodb-core/lib/connection/connection.js:276:9) at Object.onceWrapper (events.js:272:13) at TLSSocket.emit (events.js:185:15) at _handle.close (net.js:541:12) at TCP.done [as _onclose] (_tls_wrap.js:379:7) name: ''MongoNetworkError'', errorLabels: [ ''TransientTransactionError'' ], [Symbol(mongoErrorContextSymbol)]: {} }

Perdón por la pregunta tonta, pero ¿alguien puede decirme qué está pasando aquí? ¿Y qué estoy haciendo mal?

EDITAR : Encontré un artículo relacionado con este problema: https://docs.mongodb.com/manual/core/transactions/#retry-transaction Pero realmente no puedo compensar nada con eso.

EDIT 2 : encontrado el problema. Fue un problema de red, ya que dice MongoNetworkError y supongo que TransientTransactionError refiere a algún problema temporal del lado de la base de datos. Lo resolví haciendo una lista blanca de mi dirección IP.


¿Qué es un TransientTransactionError?

Un TransientTransactionError es un error transaccional que se clasifica como temporal y, si se reintenta, puede tener éxito. Además, se produce un conflicto de escritura TransientTransactionError antes de una confirmación cuando no se ha realizado un bloqueo de escritura y la transacción (datos nuevos) no se refleja en la instantánea de la transacción (datos anteriores). Como resultado, estos errores son completamente seguros de reintentar hasta que Es un compromiso exitoso.

Las transacciones que se reintentan en este escenario se reintentan desde el principio de la transacción.

Tenga en cuenta que esta etiqueta de error es diferente de los errores de confirmación que se producen cuando se realiza el bloqueo, pero la transacción no puede completar su confirmación. La etiqueta de error para esto es UnknownTransactionCommitResult. La referencia a esto es notable debido a la diferencia en la comprensión de dónde está ocurriendo un error en su aplicación y cuál puede ser la causa subyacente y cómo la aplicación puede y / o responderá debido a diferentes tipos de errores.

Si está utilizando controladores compatibles con MongoDB , hay dos causas posibles por las que el código está recibiendo este error:

  • Cualquier error de comando de la base de datos que incluya la etiqueta de error "TransientTransactionError" en el campo "errorLabels".
  • Cualquier error de red encontrado ejecutando cualquier comando que no sea commitTransaction en una transacción.

El ejemplo de código en https://docs.mongodb.com/manual/core/transactions/#retry-transaction muestra cómo manejar TransientTransactionError .


Encontré este error al ejecutar la secuencia de comandos pop.js en el tutorial de MDN para Express / NodeJS.

La secuencia de comandos buscaba una conexión de db que comenzara con mongodb:// , sin embargo, mi cadena de conexión de mongo comenzó con mongodb+srv:// .

Edité el script para verificar esta sintaxis, lo que resolvió el error.

Espero que esto ayude a alguien.


Para mí, el error de transacción transitoria ocurrió cada vez que cambié de mi red wifi al punto de acceso de mi teléfono. Si esto también le sucede a usted, vaya al sitio web de MongoDB donde ha creado su base de datos y vuelva a incluir en su lista de direcciones IP su dirección IP actual. Esto resolverá tu problema.


Puede leer sobre el error en línea, pero la solución para este problema es : vaya a su atlas MongoDB y agregue su dirección IP . Funcionará bien


Si aún tiene este error, otra razón es que se olvidó de reiniciar el servidor nodemon después de cambiar el archivo de configuración. CTRL + C y empezar de nuevo, así es como lo resolví.


Si está utilizando MongoDB Atlas. Debe incluir su dirección IP en la Consola Atlas en la configuración de seguridad.


Si no hay ningún problema de seguridad y solo lo hace para conectarse: Al configurar la lista blanca de IP; El formato debe ser 0.0.0.0/0, no enfrentarás el problema.

Además, como se ha respondido usted mismo, podemos agregar la ip para la que necesitamos acceso.


Tuve el mismo problema / error, aunque en una máquina con Windows. Aunque pensé que había iniciado el servicio mongodb, no lo vi ejecutándose en los Servicios de Windows. Entonces, comencé manualmente el servicio mongoDB dentro de Servicios y luego el error desapareció. ¡Espero que esto ayude!


Tuve este problema al intentar conectar mi aplicación Heroku a una base de datos Atlas de MongoDB.

Si haces una en tu terminal

heroku logs --tail

Es posible que vea

ERROR: { MongoNetworkError: connection 4 to cluster0-shard-40-01-qnwp8.mongodb.net:27017 closed name: ''MongoNetworkError'', errorLabels: [ ''TransientTransactionError'' ], [Symbol(mongoErrorContextSymbol)]: {} }`

Después de incluir en la lista blanca la conexión del servidor en MongoDB Atlas, se resolvió el error de conexión de la base de datos.


Tuve un problema similar ... Todo el día pude conectarme a través de la mangosta. Entonces bang comencé a recibir el error ''TransientTransactionError''. Podía conectarme a mongoDB a través de shell, así que sabía que el servidor estaba funcionando como se esperaba.

IPv6 / localhost. Mi IP cambió de IPv4 a IPv6. Resolví el problema deshabilitando IPv6 y obteniendo IPv4 IP regular.

EDITAR - parece que puedo volver a crear / crear este problema de manera confiable conectándome a ''localhost'' mientras mi NIC está configurada con una IP de IPv6. Cambiar localhost-> 127.0.0.1 parece resolver el problema.


tuve

''MongoNetworkError'', errorLabels: [ ''TransientTransactionError'' ], [Symbol(mongoErrorContextSymbol)]:

Agregué mi IP actual a la lista blanca después de "página principal> sección de seguridad> acceso a la red> agregar IP" en el sitio web de MongoDB.

Espero que esto ayude.