Mongoose(或MongoDB)中的TransientTransactionError是什么?

Sag*_*han 23 javascript mongoose mongodb node.js

所以,我有两个文件,一个是server.js,另一个是db.jsdb.js文件用猫鼬我的数据库交互,我用server.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}`)
                })
            }
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

而我server.js调用三种功能于全部来自db.js那是

var DB = require('./db.js')
var db = DB()
db.getPostsAll()
db.newPost()
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我会收到此错误:

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)]: {} }
Run Code Online (Sandbox Code Playgroud)

对不起这个愚蠢的问题,但有谁能说我这里发生了什么?我做错了什么?

编辑:我发现了一篇与此问题相关的文章:https://docs.mongodb.com/manual/core/transactions/#retry-transaction 但不能真正弥补它的任何问题.

编辑2:发现问题.这是一个网络问题,因为它说server.js,我猜db.js是指一些数据库方临时问题.我通过将我的IP地址列入白名单解决了这个问题.

gak*_*tsi 31

我有

  'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]:
Run Code Online (Sandbox Code Playgroud)

我在MongoDB网站的“主页>安全部分>网络访问>添加IP”下面将我当前的IP添加到了白名单。

我希望这有帮助。

  • 这实际上解决了上述错误。非常感谢! (2认同)

Wan*_*iar 15

什么是TransientTransactionError

A TransientTransactionError是一个被归类为临时的事务性错误,如果重试,则可能是成功的.

如果您使用的是MongoDB支持的驱动程序,则可能有两种原因导致代码出现此错误:

  • 任何数据库命令错误,包括"errorLabels"字段中的"TransientTransactionError"错误标签.
  • 在事务中运行除commitTransaction之外的任何命令时遇到任何网络错误.

MongoDB事务中的代码示例:retry-transaction show cased如何处理TransientTransactionError.


Sin*_*rav 5

如果没有安全问题并且您只是为了连接而这样做:在设置 IP 白名单时;格式应该是 0.0.0.0/0 ,你不会遇到这个问题。

在此处输入图片说明

此外,正如您自己回答的那样,我们可以添加我们需要访问的 ip。


小智 5

  1. 转到您的 mongoDB Atlas 仪表板
  2. 打开网络访问(它在侧面导航栏中)
  3. 点击添加IP地址
  4. 单击允许从任何 IP 地址(它基本上可以访问您的动态 IP 地址)

现在你完成了。