Mongo 오류:이 MongoDB 배포는 재시도 가능한 쓰기를 지원하지 않습니다.연결 문자열에 retryWrites=false를 추가하십시오.
는 사용중을 하고 있습니다."mongoose": "^5.7.1"
내 Node.js 프로젝트에서.나는 두 개의 문서에 대한 업데이트를 포함하는 api를 만들고 있습니다.그래서 저는 다음과 같은 거래를 사용하고 있습니다.
// Start the transaction
session = await mongoose.startSession()
session.startTransaction()
await Promise.all([
<1st update operation>,
<2nd update operation>
])
// Commit the transaction
session.commitTransaction()
로컬 환경에서 이 api를 누르면 다음 오류가 발생합니다.
Mongo 오류:이 MongoDB 배포는 재시도 가능한 쓰기를 지원하지 않습니다.연결 문자열에 retryWrites=false를 추가하십시오.
원격 환경에서 이 api를 누르면 정상적으로 실행됩니다.저는 https://www.clever-cloud.com 을 데이터베이스 클라우드로, AWS를 api 클라우드로 사용하고 있습니다.
오류 메시지에 기록된 것처럼, 저는 다음과 같이 입력하려고 했습니다.retryWrites=false
- 내가 몽구스로 전달하는 연결 문자열의 끝에.
mongodb://${ip}:${port}/${this.MONGO_DATABASE}?retryWrites=false
- 옵션을 사용할 수 있는
retryWrites: false
로전된으로 .mongoose.connect
방법.
mongoose.connect(`mongodb://${ip}:${port}/${this.MONGO_DATABASE}`, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
retryWrites: false
}, (err) => {...})
위의 어느 것도 문제를 해결하지 못했습니다.
는 다은의출다니의 입니다.mongo --version
명령:
db version v4.0.13
git version: bda366f0b0e432ca143bc41da54d8732bd8d03c0
allocator: system
modules: none
build environment:
distarch: x86_64
target_arch: x86_64
디버깅 결과 이 오류를 발생시킨 실제 오류는 다음과 같습니다.
Mongo 오류:트랜잭션 번호는 복제본 집합 구성원 또는 몽고에서만 허용됩니다.
제안 좀 해주세요.
승인된 답변에서 제안된 대로, 독립 실행형 서버가 아닌 트랜잭션을 수행하려면 로컬 서버를 복제본 집합으로 실행해야 합니다.
그러나 제안된 솔루션 외에도 다음과 같이 요약된 MongoDB 설명서의 지침에 따라 타사 도구를 사용하지 않고도 독립 실행형 로컬 데이터베이스를 복제본 세트로 쉽게 변환할 수 있습니다.
- 실행형 인스턴스를 하고 mongod 를 다시 합니다.
replSet
논쟁.
mongod --port 27017 --dbpath /srv/mongodb/db0 --replSet rs0 --bind_ip localhost
- 를 사용합니다.
mongo
새 복제 세트를 시작합니다.
rs.initiate()
이제 로컬 환경에서 트랜잭션을 수행하여 여러 문서를 한 번에 업데이트할 수 있는 독립 실행형 mongodb 서버 대신 복제본 세트가 있어야 합니다!
다음을 포함하는 것을 잊지 마십시오.replSet
서버를 시작할 때마다 인수를 지정합니다. 그렇지 않으면 독립 실행형으로 시작됩니다.1단계와 동일한 명령을 사용하여 다시 실행합니다.
또는 MongoDB 설명서의 다른 지침에 따라 테스트 환경을 위해 새 복제본 세트를 처음부터 배포할 수 있습니다.
트랜잭션은 의심할 여지 없이 MongoDB 4.0의 가장 흥미로운 새로운 기능입니다. 하지만 안타깝게도 MongoDB를 설치하고 실행하기 위한 대부분의 도구는 복제 세트가 아닌 독립 실행형 서버를 시작합니다.독립 실행형 서버에서 세션을 시작하려고 하면 이 오류가 발생합니다.
이 문제는 로컬 환경에서 복제 세트를 사용하여 해결할 수 있습니다.
저는 이 목적을 위해 run-rs를 사용했습니다.
추가해 보십시오.&retryWrites=false
연결 문자열로
--
실제로 원격 DB 서버에 연결할 때 OP에서 언급된 오류가 발생했습니다.오류가 발생한 제안을 시도하기 전에 몽고 호스트 지원부에 문의했습니다.
--
호스팅된 mongo 사이트(mLab)는 다음과 같이 말했습니다.
앱의 드라이버가 Wired Tiger 전용 기능을 사용하려는 최신 버전으로 업데이트되었을 수 있습니다.오류가 언급되었듯이 연결 문자열에 Writes=false를 추가해야 합니다.
https://docs.mlab.com/faq/ #왜 ---나는 트랜잭션 검색을 허용하는지, 스토리지 검색만 허용되는지, 지원하는지, 수준별로 잠금 오류
편집하십시오.App/Config/database
파일 추가'retryWrites'=>false
In Mongodb 연결 문자열
write Mongodb 연결
'mongodb' => [
'driver' => 'mongodb',
'host' => env('MONGO_DB_HOST', 'lo*****'),
'port' => *****,
'database' => env('MONGO_DB_DATABASE'),
'username' => env('MONGO_DB_USERNAME'),
'password' => env('MONGO_DB_PASSWORD'),
'options' => [
'database'=> env('MONGO_DB_DATABASE'),
'retryWrites'=>false
]
],
저장 후 실행
언급URL : https://stackoverflow.com/questions/58589631/mongoerror-this-mongodb-deployment-does-not-support-retryable-writes-please-ad
'programing' 카테고리의 다른 글
결과를 나누기 위한 SQL의 십진수 값 (0) | 2023.07.01 |
---|---|
NumPy 2d 배열의 슬라이싱 또는 nxn 배열(n>m)에서 mxm 하위 매트릭스를 추출하는 방법은 무엇입니까? (0) | 2023.07.01 |
정확히 무엇을 잘라내나요(날짜, 'IW')? (0) | 2023.07.01 |
테스트 목적으로 개인 plsql 절차에 액세스할 수 있는 방법이 있습니까? (0) | 2023.07.01 |
unbuntu에 최신 버전의 git를 설치하는 중 (0) | 2023.07.01 |