2016-12-18 16 views
5

Tôi có một bản sao thiết lập trên MongoDB Atlas và đây là chuỗi kết nối Mongo vỏ của tôi mà kết nối hoàn hảo:Mongoose với ReplicaSet trên Atlas

$ mongo "mongodb://MY_SERVER-shard-00-00-clv3h.mongodb.net:27017,MY_SERVER-shard-00-01-clv3h.mongodb.net:27017,MY_SERVER-shard-00-02-clv3h.mongodb.net:27017/MY_DATABASE?replicaSet=MY_REPLICASET-NAME-shard-0" --ssl --username MY_USERNAME --password MY_PASSWORD --authenticationDatabase MY_ADMIN_DATABASE 

Làm thế nào tôi có thể chuyển đổi nó để sử dụng trong mongoose? Làm thế nào tôi có thể xây dựng biến uri và tùy chọn của tôi?

Tôi đã thử các sau đây mà không thành công:

// connection string using mongoose: 
    var uri = 'mongodb://MY_USER:[email protected]' + 
    'MY_SERVER-shard-00-00-clv3h.mongodb.net:27017,' + 
    'MY_SERVER-shard-00-01-clv3h.mongodb.net:27017,' + 
    'MY_SERVER-shard-00-02-clv3h.mongodb.net:27017/MY_DATABASE'; 

    var options = { 
    replset: { 
     ssl: true, 
     authSource: 'MY_ADMIN_DATABASE', 
     rs_name: 'MY_REPLICASET_NAME-shard-0' 
    } 
    }; 

    mongoose.connect(uri, options); 
    var db = mongoose.connection; 

Tôi đã cố gắng bao gồm cả người sử dụng: và pass: về các lựa chọn, loại bỏ my_user: MY_PASSWORD @ từ uri, thay đổi rs_name để replicaSet, mọi cố gắng không thành công. Dường như mongoose không xem xét tùy chọn authSource.

Sử dụng mongojs, nó hoạt động tốt với đoạn mã sau:

// connection string using mongojs: 
    var uri = 'mongodb://MY_USER:[email protected]' + 
    'MY_SERVER-shard-00-00-clv3h.mongodb.net:27017,' + 
    'MY_SERVER-shard-00-01-clv3h.mongodb.net:27017,' + 
    'MY_SERVER-shard-00-02-clv3h.mongodb.net:27017/MY_DATABASE'; 

    var options = { 
    ssl: true, 
    authSource: 'MY_ADMIN_DATABASE', 
    replicaSet: 'MY_REPLICASET_NAME-shard-0' 
    }; 

    var db = mongojs(uri,'', options); 

Nhưng, tôi cần phải sử dụng mongoose vì ODM trong dự án của tôi.

Làm cách nào tôi có thể tạo biến uri và biến tùy chọn bằng cách sử dụng mongoose?

Trả lời

6

tôi giải quyết vấn đề này đặt giá trị 'tùy chọn' trực tiếp trong chuỗi 'uri', theo tài liệu (http://mongoosejs.com/docs/connections.html) trên 'Replica Set Phần kết nối.

// connection string using mongoose: 
var uri = 'mongodb://MY_USER:[email protected]' + 
    'MY_SERVER-shard-00-00-clv3h.mongodb.net:27017,' + 
    'MY_SERVER-shard-00-01-clv3h.mongodb.net:27017,' + 
    'MY_SERVER-shard-00-02-clv3h.mongodb.net:27017/MY_DATABASE' + 
    'ssl=true&replicaSet=MY_REPLICASET_NAME-shard-0&authSource=MY_ADMIN_DATABASE'; 

mongoose.connect(uri); 
var db = mongoose.connection; 

Hiện tại, nó hoạt động tốt!

+0

phiên bản của mongoose nơi bạn sử dụng? –

+1

"mongoose": "^ 4.10.8" @AdeelImran Imran –

0

Thêm tên người dùng và mật khẩu để kết nối cơ sở dữ liệu

mongodb://[username:[email protected]]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] 

Standard Connection String Format

+0

Cảm ơn Engin, tôi đã làm và tôi phát hiện ra vấn đề thực sự, vấn đề là authSource không được công nhận bởi mongoose ... Tôi sẽ mở một vé trên github để liên hệ vấn đề này. –

Các vấn đề liên quan