Tôi đang gặp khó khăn khi hiểu các cài đặt thời gian chờ tốt nhất để định cấu hình cho ứng dụng của mình Có ba loại cài đặt thời gian chờ:
ConnectItTimeoutms sockettimeoutms MaxImems
Và cùng với họ, chúng tôi cũng có:
PoolSize PoolSize Autoreconnect
ConnectTimeout tương ứng với cài đặt thời gian chờ khi ứng dụng không kết nối với MongoDB trong khung thời gian được cụ thể. Tôi cho rằng điều này sẽ dẫn đến một ngoại lệ.
Sockettimeoutms tương ứng với ổ cắm chờ để nhận phản hồi từ máy chủ DB trước khi đóng.
MaxTimem tương ứng với thời gian chờ của một thao tác chạy trong DB. Điều này dẫn đến một ngoại lệ.
Sự khác biệt giữa Sockettimeout và MaxTimeout là gì ?. Tôi có yêu cầu tôi phải đăng nhập mã lỗi khi yêu cầu đến cơ sở dữ liệu đã hết thời gian sau {5} giây. Không nhận được phản hồi từ cơ sở dữ liệu này. Cài đặt thời gian chờ tốt nhất cho mục đích này là gì?
Làm thế nào là poolsize, giữ, tự động được kết nối với các cài đặt thời gian chờ? Ví dụ sẽ hữu ích.
Kết nối
Bạn có thể kết nối với MongoDB với phương pháp
mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
8.mongoose.connect['mongodb://localhost:27017/myapp'];
Đây là mức tối thiểu cần thiết để kết nối cơ sở dữ liệu
mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
9 chạy cục bộ trên cổng mặc định [27017]. Nếu kết nối không thành công trên máy của bạn, hãy thử sử dụng const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Will just hang until mongoose successfully connects
MyModel.findOne[function[error, result] { /* ... */ }];
setTimeout[function[] {
mongoose.connect['mongodb://localhost:27017/myapp'];
}, 60000];
0 thay vì const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Will just hang until mongoose successfully connects
MyModel.findOne[function[error, result] { /* ... */ }];
setTimeout[function[] {
mongoose.connect['mongodb://localhost:27017/myapp'];
}, 60000];
1.Bạn cũng có thể chỉ định một số tham số khác trong
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Will just hang until mongoose successfully connects
MyModel.findOne[function[error, result] { /* ... */ }];
setTimeout[function[] {
mongoose.connect['mongodb://localhost:27017/myapp'];
}, 60000];
2:mongoose.connect['mongodb://username:password@host:port/database?options...'];
Xem thông số chuỗi kết nối MongoDB để biết thêm chi tiết.
- Bộ đệm
- Xử lý lỗi
- Tùy chọn
- Tùy chọn chuỗi kết nối
- Sự kiện kết nối
- Một lưu ý về Keepalive
- Lựa chọn máy chủ
- Bản sao đặt kết nối
- Bản sao đặt tên máy chủ
- Hỗ trợ nhiều người
- Nhiều kết nối
- Nhóm kết nối
Mỗi mongoose.connect['mongodb://username:password@host:port/database?options...'];
44, cho dù được tạo bằng mongoose.connect['mongodb://username:password@host:port/database?options...'];
45 hoặc mongoose.connect['mongodb://username:password@host:port/database?options...'];
46 đều được hỗ trợ bởi nhóm kết nối có thể cấu hình bên trong định cư tối đa là 100. Điều chỉnh kích thước nhóm bằng các tùy chọn kết nối của bạn:
mongoose.connect['mongodb://username:password@host:port/database?options...'];
mongoose.connect['mongodb://username:password@host:port/database?options...'];
mongoose.connect['mongodb://username:password@host:port/database?options...'];
mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
7Tiếp theoBây giờ chúng tôi đã đề cập đến các kết nối, chúng ta hãy xem các mô hình.
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Will just hang until mongoose successfully connects
MyModel.findOne[function[error, result] { /* ... */ }];
setTimeout[function[] {
mongoose.connect['mongodb://localhost:27017/myapp'];
}, 60000];
Kết nối
mongoose.set['bufferCommands', false];
Bạn có thể kết nối với MongoDB với phương pháp
mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
8.const schema = new Schema[{
name: String
}, {
capped: { size: 1024 },
bufferCommands: false,
autoCreate: false // disable `autoCreate` since `bufferCommands` is false
}];
const Model = mongoose.model['Test', schema];
// Explicitly create the collection before using it
// so the collection is capped.
await Model.createCollection[];
Xử lý lỗi
Tùy chọn
- Tùy chọn chuỗi kết nốinot automatically try to reconnect.
- Sự kiện kết nối
Một lưu ý về Keepalive
mongoose.connect['mongodb://localhost:27017/test'].
catch[error => handleError[error]];
// Or:
try {
await mongoose.connect['mongodb://localhost:27017/test'];
} catch [error] {
handleError[error];
}
Lựa chọn máy chủ
mongoose.connection.on['error', err => {
logError[err];
}];
Bản sao đặt kết nối
Tùy chọn
Tùy chọn chuỗi kết nối
mongoose.connect[uri, options];
Sự kiện kết nối
3 - Đây là một lựa chọn dành riêng cho Mongoose [không được chuyển cho trình điều khiển MongoDB]const MyModel = mongoose.model['Test', new Schema[{ name: String }]]; // Will just hang until mongoose successfully connects MyModel.findOne[function[error, result] { /* ... */ }]; setTimeout[function[] { mongoose.connect['mongodb://localhost:27017/myapp']; }, 60000];
- ________ 48/________ 49 - Tên người dùng và mật khẩu để xác thực. Các tùy chọn này là đặc trưng cho Mongoose, chúng tương đương với các tùy chọn
0 và ____51 của người lái xe MongoDB.const schema = new Schema[{ name: String }, { capped: { size: 1024 }, bufferCommands: false, autoCreate: false // disable `autoCreate` since `bufferCommands` is false }]; const Model = mongoose.model['Test', schema]; // Explicitly create the collection before using it // so the collection is capped. await Model.createCollection[];
2 - Theo mặc định, Mongoose sẽ tự động xây dựng các chỉ mục được xác định trong lược đồ của bạn khi nó kết nối. Điều này là tuyệt vời cho sự phát triển, nhưng không lý tưởng cho việc triển khai sản xuất lớn, bởi vì các bản dựng chỉ số có thể gây ra sự suy giảm hiệu suất. Nếu bạn đặtconst schema = new Schema[{ name: String }, { capped: { size: 1024 }, bufferCommands: false, autoCreate: false // disable `autoCreate` since `bufferCommands` is false }]; const Model = mongoose.model['Test', schema]; // Explicitly create the collection before using it // so the collection is capped. await Model.createCollection[];
2 thành Sai, Mongoose sẽ không tự động xây dựng các chỉ mục cho bất kỳ mô hình nào được liên kết với kết nối này.any model associated with this connection.const schema = new Schema[{ name: String }, { capped: { size: 1024 }, bufferCommands: false, autoCreate: false // disable `autoCreate` since `bufferCommands` is false }]; const Model = mongoose.model['Test', schema]; // Explicitly create the collection before using it // so the collection is capped. await Model.createCollection[];
4 - Chỉ định cơ sở dữ liệu nào để kết nối và ghi đè bất kỳ cơ sở dữ liệu nào được chỉ định trong chuỗi kết nối. Điều này rất hữu ích nếu bạn không thể chỉ định cơ sở dữ liệu mặc định trong chuỗi kết nối như với một số kết nối cú phápconst schema = new Schema[{ name: String }, { capped: { size: 1024 }, bufferCommands: false, autoCreate: false // disable `autoCreate` since `bufferCommands` is false }]; const Model = mongoose.model['Test', schema]; // Explicitly create the collection before using it // so the collection is capped. await Model.createCollection[];
5.const schema = new Schema[{ name: String }, { capped: { size: 1024 }, bufferCommands: false, autoCreate: false // disable `autoCreate` since `bufferCommands` is false }]; const Model = mongoose.model['Test', schema]; // Explicitly create the collection before using it // so the collection is capped. await Model.createCollection[];
Dưới đây là một số tùy chọn quan trọng để điều chỉnh Mongoose.
6 - Đặt thư viện lời hứa của người lái xe cơ bản.const schema = new Schema[{ name: String }, { capped: { size: 1024 }, bufferCommands: false, autoCreate: false // disable `autoCreate` since `bufferCommands` is false }]; const Model = mongoose.model['Test', schema]; // Explicitly create the collection before using it // so the collection is capped. await Model.createCollection[];
7 - Số lượng ổ cắm tối đa mà trình điều khiển MongoDB sẽ tiếp tục mở cho kết nối này. Theo mặc định,const schema = new Schema[{ name: String }, { capped: { size: 1024 }, bufferCommands: false, autoCreate: false // disable `autoCreate` since `bufferCommands` is false }]; const Model = mongoose.model['Test', schema]; // Explicitly create the collection before using it // so the collection is capped. await Model.createCollection[];
7 là 100. Hãy nhớ rằng MongoDB chỉ cho phép một thao tác mỗi ổ cắm cùng một lúc, vì vậy bạn có thể muốn tăng điều này nếu bạn thấy bạn có một vài truy vấn chậm đang chặn các truy vấn nhanh hơn tiến hành. Xem các chuyến tàu chậm trong MongoDB và Node.js. Bạn có thể muốn giảmconst schema = new Schema[{ name: String }, { capped: { size: 1024 }, bufferCommands: false, autoCreate: false // disable `autoCreate` since `bufferCommands` is false }]; const Model = mongoose.model['Test', schema]; // Explicitly create the collection before using it // so the collection is capped. await Model.createCollection[];
7 nếu bạn đang chạy vào giới hạn kết nối.const schema = new Schema[{ name: String }, { capped: { size: 1024 }, bufferCommands: false, autoCreate: false // disable `autoCreate` since `bufferCommands` is false }]; const Model = mongoose.model['Test', schema]; // Explicitly create the collection before using it // so the collection is capped. await Model.createCollection[];
0 - Số lượng ổ cắm tối thiểu mà trình điều khiển MongoDB sẽ tiếp tục mở cho kết nối này. Người lái xe MongoDB có thể đóng các ổ cắm đã không hoạt động trong một thời gian. Bạn có thể muốn tăngmongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
0 nếu bạn mong đợi ứng dụng của mình sẽ trải qua thời gian không hoạt động dài và muốn đảm bảo ổ cắm của bạn mở để tránh các chuyến tàu chậm khi hoạt động tăng lên.mongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
2 - Trình điều khiển MongoDB sẽ đợi bao lâu trước khi giết một ổ cắm do không hoạt động sau khi kết nối ban đầu. Một ổ cắm có thể không hoạt động vì không có hoạt động hoặc hoạt động dài. Điều này được đặt thànhmongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
3 Theo mặc định, bạn nên đặt điều này thành 2-3x Hoạt động chạy dài nhất của mình nếu bạn mong đợi một số hoạt động cơ sở dữ liệu của bạn sẽ chạy lâu hơn 20 giây. Tùy chọn này được chuyển đến chức năng Node.jsmongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
4 sau khi trình điều khiển MongoDB hoàn thành thành công.mongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
5 - Cho dù kết nối bằng IPv4 hoặc IPv6. Tùy chọn này được chuyển đến hàmmongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
6 của Node.js. Nếu bạn không chỉ định tùy chọn này, trình điều khiển MongoDB sẽ thử IPv6 trước và sau đó IPv4 nếu IPv6 không thành công. Nếu cuộc gọimongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
7 của bạn mất nhiều thời gian, hãy thửmongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
8mongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
9 - Cơ sở dữ liệu để sử dụng khi xác thực vớimongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
8 vàmongoose.set['bufferCommands', false];
9. Trong MongoDB, người dùng được đưa vào cơ sở dữ liệu. Nếu bạn đang gặp lỗi đăng nhập bất ngờ, bạn có thể cần đặt tùy chọn này.mongoose.set['bufferCommands', false];
2 - Trình điều khiển MongoDB sẽ cố gắng tìm một máy chủ để gửi bất kỳ hoạt động nào đến và tiếp tục thử lại chomongoose.connection.on['error', err => { logError[err]; }];
2 mili giây. Nếu không được đặt, trình điều khiển MongoDB mặc định sử dụngmongoose.connection.on['error', err => { logError[err]; }];
3 [30 giây].mongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
5 - Trình điều khiển MongoDB gửi nhịp tim mỗimongoose.connection.on['error', err => { logError[err]; }];
5 để kiểm tra trạng thái của kết nối. Một nhịp tim phải chịumongoose.connection.on['error', err => { logError[err]; }];
2, vì vậy người lái xe MongoDB sẽ thử lại các nhịp tim thất bại trong tối đa 30 giây theo mặc định. Mongoose chỉ phát ra một sự kiệnmongoose.connection.on['error', err => { logError[err]; }];
8 sau khi nhịp tim thất bại, vì vậy bạn có thể muốn giảm cài đặt này để giảm thời gian giữa khi máy chủ của bạn giảm và khi Mongoose phát ramongoose.connection.on['error', err => { logError[err]; }];
8. Chúng tôi khuyên bạn không nên đặt cài đặt này dưới 1000, quá nhiều nhịp tim có thể dẫn đến suy giảm hiệu suất.not set this setting below 1000, too many heartbeats can lead to performance degradation.mongoose.connection.on['error', err => { logError[err]; }];
Tùy chọn
mongoose.connection.on['error', err => {
logError[err];
}];
2 cũng xử lý thời gian mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
8 sẽ thử lại kết nối ban đầu trước khi lỗi. mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
8 sẽ thử lại trong 30 giây theo mặc định [mặc định mongoose.connection.on['error', err => {
logError[err];
}];
2] trước khi lỗi. Để nhận được phản hồi nhanh hơn về các hoạt động thất bại, bạn có thể giảm mongoose.connection.on['error', err => {
logError[err];
}];
2 xuống 5000 như được hiển thị bên dưới.Example:
const options = {
autoIndex: false, // Don't build indexes
maxPoolSize: 10, // Maintain up to 10 socket connections
serverSelectionTimeoutMS: 5000, // Keep trying to send operations for 5 seconds
socketTimeoutMS: 45000, // Close sockets after 45 seconds of inactivity
family: 4 // Use IPv4, skip trying IPv6
};
mongoose.connect[uri, options];
Xem trang này để biết thêm thông tin về
mongoose.connect[uri, options];
5 và mongoose.connect['mongodb://localhost:27017/test'].
catch[error => handleError[error]];
// Or:
try {
await mongoose.connect['mongodb://localhost:27017/test'];
} catch [error] {
handleError[error];
}
2Gọi lại
Hàm
mongoose.connect[uri, options];
7 cũng chấp nhận tham số gọi lại và trả về lời hứa.mongoose.connect['mongodb://username:password@host:port/database?options...'];
0Tùy chọn chuỗi kết nối
Bạn cũng có thể chỉ định các tùy chọn trình điều khiển trong chuỗi kết nối của mình làm tham số trong phần chuỗi truy vấn của URI. Điều này chỉ áp dụng cho các tùy chọn được chuyển cho trình điều khiển MongoDB. Bạn không thể đặt các tùy chọn dành riêng cho Mongoose như
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Will just hang until mongoose successfully connects
MyModel.findOne[function[error, result] { /* ... */ }];
setTimeout[function[] {
mongoose.connect['mongodb://localhost:27017/myapp'];
}, 60000];
3 trong chuỗi truy vấn.can't set Mongoose-specific options like const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Will just hang until mongoose successfully connects
MyModel.findOne[function[error, result] { /* ... */ }];
setTimeout[function[] {
mongoose.connect['mongodb://localhost:27017/myapp'];
}, 60000];
3 in the query string.mongoose.connect['mongodb://username:password@host:port/database?options...'];
1Nhược điểm của việc đặt các tùy chọn vào chuỗi truy vấn là các tùy chọn chuỗi truy vấn khó đọc hơn. Ưu điểm là bạn chỉ cần một tùy chọn cấu hình duy nhất, URI, thay vì các tùy chọn riêng biệt cho
mongoose.connect['mongodb://localhost:27017/test'].
catch[error => handleError[error]];
// Or:
try {
await mongoose.connect['mongodb://localhost:27017/test'];
} catch [error] {
handleError[error];
}
2, mongoose.connect[uri, options];
5, v.v ... Thực tiễn tốt nhất là đặt các tùy chọn có khả năng khác nhau giữa phát triển và sản xuất, như const options = {
autoIndex: false, // Don't build indexes
maxPoolSize: 10, // Maintain up to 10 socket connections
serverSelectionTimeoutMS: 5000, // Keep trying to send operations for 5 seconds
socketTimeoutMS: 45000, // Close sockets after 45 seconds of inactivity
family: 4 // Use IPv4, skip trying IPv6
};
mongoose.connect[uri, options];
1 hoặc const options = {
autoIndex: false, // Don't build indexes
maxPoolSize: 10, // Maintain up to 10 socket connections
serverSelectionTimeoutMS: 5000, // Keep trying to send operations for 5 seconds
socketTimeoutMS: 45000, // Close sockets after 45 seconds of inactivity
family: 4 // Use IPv4, skip trying IPv6
};
mongoose.connect[uri, options];
2, trong chuỗi kết nối, trong chuỗi kết nối, và các tùy chọn vẫn không đổi, như mongoose.connect[uri, options];
5 hoặc const schema = new Schema[{
name: String
}, {
capped: { size: 1024 },
bufferCommands: false,
autoCreate: false // disable `autoCreate` since `bufferCommands` is false
}];
const Model = mongoose.model['Test', schema];
// Explicitly create the collection before using it
// so the collection is capped.
await Model.createCollection[];
7, trong đối tượng Tùy chọn.Các tài liệu MongoDB có một danh sách đầy đủ các tùy chọn chuỗi kết nối được hỗ trợ. Dưới đây là một số tùy chọn thường hữu ích để đặt trong chuỗi kết nối vì chúng được liên kết chặt chẽ với tên máy chủ và thông tin xác thực.
9 - Cơ sở dữ liệu để sử dụng khi xác thực vớimongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
8 vàmongoose.set['bufferCommands', false];
9. Trong MongoDB, người dùng được đưa vào cơ sở dữ liệu. Nếu bạn đang gặp lỗi đăng nhập bất ngờ, bạn có thể cần đặt tùy chọn này.mongoose.set['bufferCommands', false];
5 - Cho dù kết nối bằng IPv4 hoặc IPv6. Tùy chọn này được chuyển đến hàmmongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
6 của Node.js. Nếu bạn không chỉ định tùy chọn này, trình điều khiển MongoDB sẽ thử IPv6 trước và sau đó IPv4 nếu IPv6 không thành công. Nếu cuộc gọimongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
7 của bạn mất nhiều thời gian, hãy thửmongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
8mongoose.connect['mongodb://localhost:27017/test']. catch[error => handleError[error]]; // Or: try { await mongoose.connect['mongodb://localhost:27017/test']; } catch [error] { handleError[error]; }
Sự kiện kết nối
Các kết nối kế thừa từ lớp
mongoose.connect['mongodb://username:password@host:port/database?options...'];
02 của Node.js và phát ra các sự kiện khi có điều gì đó xảy ra với kết nối, như mất kết nối với máy chủ MongoDB. Dưới đây là danh sách các sự kiện mà một kết nối có thể phát ra.
03: phát ra khi Mongoose bắt đầu thực hiện kết nối ban đầu với máy chủ MongoDBmongoose.connect['mongodb://username:password@host:port/database?options...'];
04: phát ra khi Mongoose thành công kết nối ban đầu với máy chủ MongoDB hoặc khi Mongoose kết nối lại sau khi mất kết nối. Có thể được phát ra nhiều lần nếu Mongoose mất kết nối.mongoose.connect['mongodb://username:password@host:port/database?options...'];
05: phát ra saumongoose.connect['mongodb://username:password@host:port/database?options...'];
06 vàmongoose.connect['mongodb://username:password@host:port/database?options...'];
07 được thực thi trên tất cả các mô hình của kết nối này.mongoose.connect['mongodb://username:password@host:port/database?options...'];
08: Ứng dụng của bạn gọimongoose.connect['mongodb://username:password@host:port/database?options...'];
09 để ngắt kết nối với MongoDBmongoose.connect['mongodb://username:password@host:port/database?options...'];
3: phát ra khi Mongoose mất kết nối với máy chủ MongoDB. Sự kiện này có thể là do mã của bạn đóng rõ ràng kết nối, sự cố máy chủ cơ sở dữ liệu hoặc sự cố kết nối mạng.mongoose.set['bufferCommands', false];
11: phát ra saumongoose.connect['mongodb://username:password@host:port/database?options...'];
09 Đóng thành công kết nối. Nếu bạn gọimongoose.connect['mongodb://username:password@host:port/database?options...'];
13, bạn sẽ nhận được cả sự kiện 'bị ngắt kết nối' và sự kiện 'đóng'.mongoose.connect['mongodb://username:password@host:port/database?options...'];
14: phát ra nếu Mongoose mất kết nối với MongoDB và kết nối lại thành công. Mongoose cố gắng tự động kết nối lại khi mất kết nối với cơ sở dữ liệu.mongoose.connect['mongodb://username:password@host:port/database?options...'];
15: phát ra nếu xảy ra lỗi trên kết nối, nhưmongoose.connect['mongodb://username:password@host:port/database?options...'];
16 do dữ liệu không đúng hoặc tải trọng lớn hơn 16MB.mongoose.connect['mongodb://username:password@host:port/database?options...'];
17: phát ra khi bạn kết nối với một bộ bản sao và Mongoose đã kết nối thành công với chính và ít nhất một phụ.mongoose.connect['mongodb://username:password@host:port/database?options...'];
18: phát ra khi bạn kết nối với một bộ bản sao và Mongoose đã kết nối thành công với tất cả các máy chủ được chỉ định trong chuỗi kết nối của bạn.mongoose.connect['mongodb://username:password@host:port/database?options...'];
Khi bạn kết nối với một máy chủ MongoDB duy nhất ["độc lập"], Mongoose sẽ phát ra 'ngắt kết nối' nếu nó bị ngắt kết nối với máy chủ độc lập và 'kết nối' nếu nó kết nối thành công với độc lập. Trong một bộ bản sao, Mongoose sẽ phát ra 'ngắt kết nối' nếu nó mất kết nối với bản sao chính và 'kết nối' nếu nó quản lý kết nối lại với bản sao chính.
Một lưu ý về Keepalive
Đối với các ứng dụng chạy dài, thường nên cho phép
mongoose.connect['mongodb://username:password@host:port/database?options...'];
19 với một số mili giây. Không có nó, sau một khoảng thời gian, bạn có thể bắt đầu thấy các lỗi mongoose.connect['mongodb://username:password@host:port/database?options...'];
20 cho những gì có vẻ như không có lý do. Nếu vậy, sau khi đọc điều này, bạn có thể quyết định bật mongoose.connect['mongodb://username:password@host:port/database?options...'];
19:mongoose.connect['mongodb://username:password@host:port/database?options...'];
2mongoose.connect['mongodb://username:password@host:port/database?options...'];
22 là số mili giây phải chờ trước khi bắt đầu mongoose.connect['mongodb://username:password@host:port/database?options...'];
19 trên ổ cắm. mongoose.connect['mongodb://username:password@host:port/database?options...'];
19 là đúng theo mặc định vì Mongoose 5.2.0.Bản sao đặt kết nối
Để kết nối với một bản sao, bạn đã vượt qua danh sách các máy chủ được phân định dấu phẩy để kết nối thay vì một máy chủ duy nhất.
mongoose.connect['mongodb://username:password@host:port/database?options...'];
3Ví dụ:
mongoose.connect['mongodb://username:password@host:port/database?options...'];
4Để kết nối với một bộ bản sao nút duy nhất, chỉ định tùy chọn
const options = {
autoIndex: false, // Don't build indexes
maxPoolSize: 10, // Maintain up to 10 socket connections
serverSelectionTimeoutMS: 5000, // Keep trying to send operations for 5 seconds
socketTimeoutMS: 45000, // Close sockets after 45 seconds of inactivity
family: 4 // Use IPv4, skip trying IPv6
};
mongoose.connect[uri, options];
1.mongoose.connect['mongodb://username:password@host:port/database?options...'];
5Lựa chọn máy chủ
Trình điều khiển MongoDB cơ bản sử dụng một quy trình được gọi là lựa chọn máy chủ để kết nối với MongoDB và gửi các hoạt động đến MongoDB. Nếu trình điều khiển MongoDB không thể tìm thấy máy chủ để gửi hoạt động đến sau
mongoose.connection.on['error', err => {
logError[err];
}];
2, bạn sẽ nhận được lỗi dưới đây:mongoose.connect['mongodb://username:password@host:port/database?options...'];
6Bạn có thể định cấu hình thời gian chờ bằng tùy chọn
mongoose.connection.on['error', err => {
logError[err];
}];
2 để mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
8:mongoose.connect['mongodb://username:password@host:port/database?options...'];
7A
mongoose.connect['mongodb://username:password@host:port/database?options...'];
29 có thuộc tính mongoose.connect['mongodb://username:password@host:port/database?options...'];
30 giải thích lý do tại sao lựa chọn máy chủ được định thời. Ví dụ: nếu bạn đang kết nối với máy chủ độc lập với mật khẩu không chính xác, mongoose.connect['mongodb://username:password@host:port/database?options...'];
30 sẽ chứa lỗi "xác thực không thành công".mongoose.connect['mongodb://username:password@host:port/database?options...'];
8Bản sao đặt tên máy chủ
Bản sao MongoDB dựa vào việc có thể tìm ra tên miền cho mỗi thành viên. Trên Linux và OSX, máy chủ MongoDB sử dụng đầu ra của lệnh
mongoose.connect['mongodb://username:password@host:port/database?options...'];
32 để tìm ra tên miền để báo cáo cho bộ bản sao. Điều này có thể gây ra các lỗi khó hiểu nếu bạn kết nối với bộ bản sao MongoDB từ xa đang chạy trên máy báo cáo mongoose.connect['mongodb://username:password@host:port/database?options...'];
32 của nó là const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Will just hang until mongoose successfully connects
MyModel.findOne[function[error, result] { /* ... */ }];
setTimeout[function[] {
mongoose.connect['mongodb://localhost:27017/myapp'];
}, 60000];
1:mongoose.connect['mongodb://username:password@host:port/database?options...'];
9Nếu bạn đang gặp lỗi tương tự, hãy kết nối với bộ bản sao bằng cách sử dụng shell
mongoose.connect['mongodb://username:password@host:port/database?options...'];
35 và chạy lệnh mongoose.connect['mongodb://username:password@host:port/database?options...'];
36 để kiểm tra tên máy chủ của từng thành viên bộ bản sao. Thực hiện theo hướng dẫn của trang này để thay đổi tên máy chủ của thành viên đã đặt bản sao.Bạn cũng có thể kiểm tra thuộc tính
mongoose.connect['mongodb://username:password@host:port/database?options...'];
37 của mongoose.connect['mongodb://username:password@host:port/database?options...'];
38 để xem trình điều khiển nút MongoDB nghĩ rằng trạng thái của bộ bản sao của bạn là gì. Thuộc tính mongoose.connect['mongodb://username:password@host:port/database?options...'];
37 chứa bản đồ mô tả máy chủ.mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
0Hỗ trợ nhiều người
Bạn cũng có thể kết nối với nhiều trường hợp Mongo để có tính sẵn sàng cao trong cụm Sharded. Bạn không cần phải vượt qua bất kỳ tùy chọn đặc biệt nào để kết nối với nhiều Mongo trong Mongoose 5.x.
mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
1Nhiều kết nối
Cho đến nay, chúng tôi đã thấy cách kết nối với MongoDB bằng kết nối mặc định của Mongoose. Mongoose tạo kết nối mặc định khi bạn gọi
mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
8. Bạn có thể truy cập kết nối mặc định bằng mongoose.connect['mongodb://username:password@host:port/database?options...'];
41.Bạn có thể cần nhiều kết nối với MongoDB vì nhiều lý do. Một lý do là nếu bạn có nhiều cơ sở dữ liệu hoặc nhiều cụm mongoDB. Một lý do khác là để làm việc xung quanh các chuyến tàu chậm. Hàm
mongoose.connect['mongodb://username:password@host:port/database?options...'];
42 có các đối số giống như mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
8 và trả về một kết nối mới. mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
2Đối tượng kết nối này sau đó được sử dụng để tạo và truy xuất các mô hình. Các mô hình luôn được đưa vào một kết nối duy nhất.always scoped to a single connection.
mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
3Nếu bạn sử dụng nhiều kết nối, bạn nên đảm bảo rằng bạn xuất các lược đồ, không phải các mô hình. Xuất một mô hình từ một tệp được gọi là mẫu mô hình xuất. Mẫu mô hình xuất bị hạn chế vì bạn chỉ có thể sử dụng một kết nối.not models. Exporting a model from a file is called the export model pattern. The export model pattern is limited because you can only use one connection.
mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
4Nếu bạn sử dụng mẫu lược đồ xuất, bạn vẫn cần tạo các mô hình ở đâu đó. Có hai mẫu phổ biến. Đầu tiên là xuất kết nối và đăng ký các mô hình trên kết nối trong tệp:
mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
5Một cách khác là đăng ký các kết nối với một kim phun phụ thuộc hoặc một mô hình đảo ngược khác của điều khiển [IOC].
mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
6Nhóm kết nối
Mỗi
mongoose.connect['mongodb://username:password@host:port/database?options...'];
44, cho dù được tạo bằng mongoose.connect['mongodb://username:password@host:port/database?options...'];
45 hoặc mongoose.connect['mongodb://username:password@host:port/database?options...'];
46 đều được hỗ trợ bởi nhóm kết nối có thể cấu hình bên trong định cư tối đa là 100. Điều chỉnh kích thước nhóm bằng các tùy chọn kết nối của bạn:mongoose.connect['mongodb://localhost:27017/myapp'];
const MyModel = mongoose.model['Test', new Schema[{ name: String }]];
// Works
MyModel.findOne[function[error, result] { /* ... */ }];
7Tiếp theo
Bây giờ chúng tôi đã đề cập đến các kết nối, chúng ta hãy xem các mô hình.