我在本地設定了一個埠轉發到在 mongodb 驅動程式版本 3.x 上成功運行的 documentDB。當我將 mongodb 包更新到 4.x 時,我收到一個超時錯誤,原因是 ReplicaSetNoPrimary。
代碼非常簡單:
const MongoClient = require('mongodb').MongoClient;
const client = new MongoClient('mongodb://xxxx:xxxx@localhost:27017');
client.connect(function(err) {
if (err) {
console.log(err);
return;
}
const db = client.db('testdb');
console.log("Connected successfully to server");
client.close();
});
有沒有人能夠使用帶有 4.x 驅動程式的埠轉發在本地連接到 documentDB?我是否缺少某種配置選項?(請記住,我已禁用所有 tls 和所有內容以使連接更簡單,并且如前所述,在使用 mongodb 3.x 包時成功連接)
uj5u.com熱心網友回復:
當連接到副本集時,驅動程式:
- 使用連接字串中的主機作為種子進行初始連接。
- 在該初始連接上運行
isMasterorhello命令以獲取 host:port 副本集成員的完整串列及其當前狀態 - 丟棄初始連接
- 連接到第 2 步中發現的每個成員
- 在操作期間,自動監控所有成員,即使不同的節點成為主節點,也將操作發送到主節點
在您的場景中,即使您連接到localhost,初始連接也會回傳包含在副本集配置中的主機:埠對。
這只是成為問題的原因是 MongoDB 驅動程式規范更改為默認使用統一拓撲。
統一拓撲允許驅動程式自動檢測它是否連接到獨立實體、副本集或分片集群,這簡化了連接程序并減少了更改資料庫部署方式時所需的管理開銷。
由于您的連接失敗,我假設副本集配置中列出的主機名:埠對要么無法決議,要么無法從測驗主機訪問。
要解決此情況,請執行以下任一操作:
- 使這臺機器可以通過 DNS 或主機檔案決議主機名,并允許通過任何防火墻連接到這些埠
- 使用
directConnection=true連接選項禁用拓撲發現
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/371135.html
標籤:节点.js MongoDB aws-documentdb
上一篇:“錯誤:MongoServerError:E11000重復鍵錯誤集合:myFirstDatabase.files索引:key_1dup鍵:{鍵:空}”
