programing

Mongoose(또는 MongoDB)에서 일시적인 트랜잭션 오류란 무엇입니까?

newstyles 2023. 5. 14. 10:26

Mongoose(또는 MongoDB)에서 일시적인 트랜잭션 오류란 무엇입니까?

있습니다server.js그리고.db.jsdb.js하여 내 와 상호 는 Mongoose를 사용합니다.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}`)
                })
            }
        }
    })
}

server.는 server.js에서 세 합니다.db.js:

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

이 오류가 발생하는 이유를 이해할 수 없습니다.

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)]: {} }

내가 뭘 잘못하고 있는 거지?는 기사를 찾았지만 전혀 이해할 수 없습니다.

나는 가지고 있었습니다

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

MongoDB 웹사이트의 "메인 페이지 > 보안 섹션 > 네트워크 접속 > IP 추가"에 따라 현재의 IP를 화이트리스트에 추가하였습니다.

이것이 도움이 되길 바랍니다.

일시적 트랜잭션 오류란 무엇입니까?

A TransientTransactionError는 임시로 분류되는 트랜잭션 오류이며, 다시 시도하면 성공할 수 있습니다.또한 쓰기 잠금이 수행되지 않고 트랜잭션(새 데이터)이 트랜잭션 스냅샷(이전 데이터)에 반영되지 않은 경우 커밋 전에 TransientTransactionError 쓰기 충돌이 발생합니다.따라서 이러한 오류는 커밋이 성공할 때까지 완전히 안전하게 재시도할 수 있습니다.

이 시나리오에서 재시도하는 트랜잭션은 트랜잭션의 처음부터 재시도됩니다.

오류 레이블은 잠금이 해제되었지만 트랜잭션이 커밋을 완료할 수 없을 때 발생하는 커밋 오류와 다릅니다.이에 대한 오류 레이블은 UnknownTransactionCommitResult입니다.응용 프로그램에서 오류가 발생하는 위치와 기본 원인이 무엇인지, 오류 유형이 달라 응용 프로그램이 어떻게 응답하거나 응답할 수 있는지에 대한 이해가 다르기 때문에 이에 대한 언급이 두드러집니다.

MongoDB 지원 드라이버를 사용하는 경우 코드에 이 오류가 발생하기 때문에 다음 두 가지가 있을 수 있습니다.

  • "errorLabels" 필드에 "TransientTransactionError" 오류 레이블이 포함된 모든 데이터베이스 명령 오류.
  • 트랜잭션에서 commitTransaction 이외의 명령을 실행 중인 네트워크 오류가 발생했습니다.

MongoDB Transactions: retry-transaction의 코드 예제는 처리 방법을 보여줍니다.TransientTransactionError.

오류 메시지가 다음과 같은 경우MongoNetworkError즉, 일시적인 트랜잭션 오류는 클라이언트와 서버 간의 네트워크 연결과 관련이 있습니다.이는 재시도가 가능한 일회성 네트워크 결함이거나 네트워크 구성이 필요한 네트워크 액세스가 없을 수 있습니다.클라이언트가 서버에 처음 액세스하려고 할 때 오류가 발생하면 네트워크 구성이 필요할 수 있습니다.서버가 MongoDB Atlas에 있는 경우, 화이트리스트 항목 구성을 참조하십시오.

  1. mongoDB Atlas 대시보드로 이동합니다.
  2. 네트워크 액세스 열기(Navbar 내부에 있음)
  3. IP 주소 추가 클릭
  4. Allow from Any IP Address(모든 IP 주소에서 허용) 클릭(기본적으로 동적 IP 주소에 액세스할 수 있음)

이제 당신은 끝났습니다.

Windows 시스템에서도 동일한 문제/오류가 발생했습니다.mongodb 서비스를 시작했다고 생각했지만 Windows 서비스에서 실행되는 것을 보지 못했습니다.그래서 서비스 내에서 수동으로 mongoDB 서비스를 시작했는데 오류가 사라졌습니다.이것이 도움이 되길 바랍니다!

보안 문제가 없고 연결을 위해 보안 문제를 수행하는 경우:IP 화이트리스트를 설정하는 동안 형식은 0.0.0.0/0이어야 하며 문제가 발생하지 않습니다.

여기에 이미지 설명 입력

또한, 당신이 직접 답변한 것처럼, 우리는 접근이 필요한 IP를 추가할 수 있습니다.

는 실행중이발생다니습했류오가를 할 때 했습니다.populatedb.jsMDN 튜토리얼의 스크립트입니다.

로 시작하는 DB 연결을 찾고 있었습니다.mongodb://은 하만 mongo의 내결연문자시작열었다니습되이지▁with다▁from▁however니로 시작했습니다.mongodb+srv://.

대신 이 구문을 확인하기 위해 스크립트를 편집하여 오류를 해결했습니다.

이것이 누군가에게 도움이 되길 바랍니다.

저도 비슷한 문제가 있었어요하루 종일 몽구스를 통해 연결할 수 있었습니다.그리고 나서 'Transient Transaction Error' 오류가 발생하기 시작했습니다.저는 셸을 통해 mongoDB에 연결할 수 있어서 서버가 정상적으로 작동하고 있다는 것을 알았습니다.

IPv6/localhost.IP가 IPv4에서 IPv6으로 전환되었습니다.IPv6를 사용하지 않도록 설정하고 일반 IPv4 IP를 가져와 문제를 해결했습니다.

편집 - NIC가 IPv6 IP로 구성되어 있는 동안 'localhost'에 연결하면 이 문제를 안정적으로 다시 생성/생성할 수 있습니다.localhost->127.0.0.1을 변경하면 문제가 해결되는 것 같습니다.

서버에 저장 공간이 부족하지 않았는지 확인합니다.

저의 경우, 제안된 답변 중 어떤 것도 도움이 되지 않았습니다.서버에 저장 공간이 부족하다는 것을 알아차릴 때까지 머리를 뽑고 있었습니다.몇 메가바이트의 저장소를 정리하면 오류가 즉시 해결되었습니다.

TransientTransactionError이 시나리오에서는 명시적인 재시도 시 해결될 수 있는 일시적인 오류라는 특성 때문에 스토리지 문제와 관련이 있는지 파악하는 데 시간이 좀 걸렸습니다.

저는 와이파이 네트워크에서 휴대폰 핫스팟으로 전환할 때마다 일시적인 거래 오류가 발생했습니다.만약 당신에게도 이런 일이 일어난다면, 당신이 데이터베이스를 만든 MongoDB 웹사이트로 가서 당신의 현재 IP 주소를 다시 화이트리스트에 올리세요.이것으로 문제가 해결될 것입니다.

MongoDB Atlas를 사용하는 경우.보안 설정에서 Atlas 콘솔의 IP 주소를 화이트리스트에 추가해야 합니다.

이 오류가 계속 발생하면 구성 파일을 변경한 후에 demon 서버를 다시 시작하지 못한 것이 또 다른 이유입니다.Ctrl+C를 누른 후 다시 시작하면 그렇게 해결했습니다.

보안 > 네트워크 액세스 > IP 주소 추가 > 현재 컴퓨터 IP 주소 추가.내 문제를 해결했습니다.

mLab 사용 - 클러스터를 만들 때 데이터베이스 사용자를 추가해야 합니다(사용자 탭 아래).Make read-only확인란을 선택합니다.일단 제가 이것을 하자, 오류가 사라졌습니다.위와 같은 오류가 발생했습니다.데이터베이스 사용자는 로그인 사용자 이름과 암호가 될 수 있습니다.

MongoDb Atlas 대시보드로 이동합니다.네트워크 액세스를 클릭하고 IP 주소 추가 및 모든 IP 주소에서 연결 허용을 클릭합니다.이것으로 당신의 문제가 해결될 것입니다.

Heroku 앱을 MongoDB Atlas 데이터베이스에 연결하려고 할 때 문제가 발생했습니다.

만약 당신이 당신의 터미널에서 a를 한다면,

heroku logs --tail

볼 수 있습니다.

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

MongoDB Atlas에서 서버 연결을 화이트리스트에 올린 후 데이터베이스 연결 오류가 해결되었습니다.

온라인에서 오류에 대해 읽을 수 있지만문제에 대한 해결책은 MongoDB 아틀라스로 이동하여 IP 주소를 추가하는 것입니다.

이동 : 메인페이지 > 보안섹션 > 네트워크 접속 > IP 추가

이 문제는 기본적으로 아키텍처가 사용자의 IP 주소를 모를 때 발생합니다.

또한 Google에 직접 복사 붙여넣기를 하면 간단한 해결책을 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/52153538/what-is-a-transienttransactionerror-in-mongoose-or-mongodb