Trạng thái kết nối MongoDB

Khi bạn làm việc trên một dự án cơ sở dữ liệu MongoDB, điều quan trọng là phải xác minh rằng cổng và tên miền của bạn là chính xác. Cài đặt sai và không nhận ra ngay lập tức có thể nhanh chóng dẫn đến năng suất bị chậm lại và gia tăng sự thất vọng. Hướng dẫn này chỉ cho bạn cách kiểm tra máy chủ MongoDB đang chạy PyMongo Python để phát sinh ngoại lệ nếu máy chủ không kết nối. Bạn được hưởng lợi khi có thể sửa cài đặt và thực hiện lệnh gọi API phương thức mà không cần do dự thêm

Nếu bạn biết các bước và muốn bỏ qua các chi tiết của hướng dẫn này, hãy bỏ qua phần Chỉ Mã

điều kiện tiên quyết

  • Cài đặt ứng dụng cơ sở dữ liệu MongoDB

  • Cài đặt PyMongo, trình điều khiển Python cho MongoDB. Bạn nên sử dụng PIP3 để cài đặt PyMongo như thế này

Sử dụng Giao diện người dùng đồ họa la bàn MongoDB (GUI) để thử tạo kết nối máy chủ

  • Cố gắng kết nối với máy chủ bằng GUI MongoDB Compass nếu bạn có ứng dụng. Bạn sẽ cho biết tên miền và cổng mà bạn đang cố gắng kết nối

  • Nếu thất bại, bạn sẽ thấy một thông báo tương tự như thế này

MongoDB không chạy trên máy chủ và cổng được cung cấp

Tại sao MongoDB không tăng ngoại lệ một cách tự nhiên

MongoDB là một cơ sở dữ liệu tài liệu mạnh mẽ tập trung vào khả năng tìm kiếm và truy xuất tài liệu. Tăng ngoại lệ không phải là ưu tiên cao nhất. Nhưng điều đó sẽ ổn thôi vì những gì MongoDB cung cấp vượt xa cách nó xử lý các ngoại lệ

Khi MongoClient() nhận được cài đặt của cổng và tên miền và chúng không giống với máy chủ, một ngoại lệ sẽ không tự động được đưa ra. Tin tốt là có nhiều cách để giải quyết vấn đề này để việc mã hóa của bạn ít nhất không bị cản trở

Đưa ra một ngoại lệ với phương thức đối tượng máy khách server_info()

  • Phương thức server_info() của đối tượng máy khách có thể được gọi khi MongoDB trả về một phiên bản máy khách. Bạn đang xác minh rằng phiên bản này là chính hãng

khách hàng = MongoClient (máy chủ = ["máy chủ cục bộ. 1111"])

khách hàng. server_info()

  • Một ngoại lệ ServerSelectionTimeoutError được hiển thị khi cài đặt chuỗi cổng và tên miền bị sai
  • Phương pháp của MongoClient() cho thời gian chờ mà bạn sẽ đặt được gọi là serverSelectionTimeoutMS. tính bằng mili giây là giá trị số nguyên vì nó mô tả cài đặt thời gian chờ lệnh gọi API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

từ pymongo nhập MongoClient

thời gian nhập khẩu

# epoch thời gian trước lệnh gọi API

bắt đầu = thời gian. thời gian()

cố gắng

# cố gắng tạo phiên bản máy khách của trình điều khiển PyMongo

khách hàng = MongoClient (máy chủ = ["máy chủ cục bộ. 1111"], serverSelectionTimeoutMS = 2000)

# gọi server_info() để xác minh rằng phiên bản máy khách hợp lệ

khách hàng. server_info() # sẽ đưa ra một ngoại lệ

ngoại trừ

in ("lỗi kết nối")

# in thời gian đã trôi qua

in (thời gian. Thời gian bắt đầu)

Đoạn mã trên dừng lệnh gọi API để kết nối với MongoDB sau một vài giây đã trôi qua và đưa ra một ngoại lệ

>LƯU Ý. Ba mươi giây là thời gian chờ mặc định nếu bạn không đặt số nguyên thời gian chờ của phương thức serverSelectionTimeoutMS

Thực hiện nhập các gói Python của trình điều khiển PyMongo

  • Lỗi kết nối máy chủ được phát hiện khi bạn nhập phương thức MongoClient và thư viện pymongo.errors

# nhập thư viện lớp MongoClient

từ pymongo nhập MongoClient, lỗi

Khai báo hàm Python để sử dụng PyMongo để kết nối

  • Phiên bản ứng dụng khách MongoClient sẽ được trả về khi bạn sử dụng chức năng def để thử tạo kết nối máy chủ MongoDB

def mongodb_connect(tên miền, cổng)

Tạo một chuỗi để nối các tham số của cổng và miền

# tạo miền và chuỗi cổng cho máy chủ MongoDB

domain_str = str(tên miền) + ". " + str(cổng)

Sử dụng chuỗi máy chủ để tạo phiên bản ứng dụng khách MongoClient()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

cố gắng

# in cổng và tên miền để kết nối với

print("nĐang cố gắng kết nối với máy chủ MongoDB. ", tên miền," trên cổng. ", Hải cảng)

# kết nối với máy chủ MongoDB không tồn tại

khách hàng = MongoClient (

máy chủ = [tên miền_str],

# thời gian chờ tính bằng mili giây

máy chủSelectionTimeoutMS = 2000

)

Xác định xem cài đặt kết nối có hợp lệ không

  • Gọi phương thức server_info() của phiên bản máy khách để kiểm tra máy chủ MongoDB đang chạy Pymongo Python với ngoại lệ có tên là ServerSelectionTimeoutError. Sử dụng thử ngoại trừ thụt đầu dòng

# server_info() sẽ tăng ngoại lệ nếu cài đặt máy chủ không hợp lệ

in ("máy chủ_thông tin(). ", khách hàng. server_info())

ngoại trừ lỗi. ServerSelectionTimeoutError là lỗi

# bắt pymongo. lỗi. ServerSelectionTimeoutError

in ("lỗi pymongo. ", sai)

# đặt phiên bản máy khách thành Không có trong trường hợp lỗi kết nối

khách hàng = Không có

trả lại khách hàng

  • Nếu kết nối không thành công, đối tượng cũ của phiên bản máy khách sẽ chuyển đổi thành đối tượng server_info()2

Chạy thử nghiệm bằng cách vượt qua một số cài đặt để AttributeError xuất hiện

  • Cố ý làm cho kết nối không thành công để kiểm tra khả năng nhận biết kết nối không thành công của chức năng

>LƯU Ý. Để đưa ra các ngoại lệ, đối tượng server_info()2 không có cùng thuộc tính của MongoDB như đối tượng server_info()4. Đây là lý do tại sao server_info()4 được đề xuất

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# gọi hàm mongodb_connect()

client = mongodb_connect("localhost", 1111)

in ("khách hàng. ", khách hàng)

# sử dụng khối thử ngoại trừ khi lấy cơ sở dữ liệu/bộ sưu tập

cố gắng

# tạo cơ sở dữ liệu mới và phiên bản bộ sưu tập

db = khách hàng. Một sốCơ sở dữ liệu

col = db["Một ​​số Bộ sưu tập"]

ngoại trừ AttributeError là lỗi

# nên tăng AttributeError nếu hàm mongodb_connect() trả về "None"

print("Nhận cơ sở dữ liệu MongoDB và bộ sưu tập LỖI. ", lỗi)

Phân tích phiên bản máy khách của PyMongo

  • Xác minh kết nối bằng cách sử dụng câu lệnh server_info()6 để phân tích xem có phiên bản ứng dụng khách server_info()7 hay không để kiểm tra máy chủ MongoDB đang chạy PyMongo Python

# hoặc đánh giá đối tượng khách hàng thay thế

nếu khách hàng. = Không có

# tạo cơ sở dữ liệu mới và phiên bản bộ sưu tập

db = khách hàng. Một sốCơ sở dữ liệu

col = db["Một ​​số Bộ sưu tập"]

khác

print ("Phiên bản máy khách không hợp lệ")

  • Là một phương pháp thay thế cho phương pháp server_info(), xác định lỗi bằng khối thụt đầu dòng thử-ngoại trừ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# kết nối với máy chủ MongoDB không tồn tại

khách hàng = MongoClient (

máy chủ = ["DOES_NOT_EXIST"],

# thời gian chờ tính bằng mili giây

máy chủSelectionTimeoutMS = 2000

)

print ("nTạo cơ sở dữ liệu và biểu mẫu thu thập phiên bản máy khách 'xấu'")

# tạo cơ sở dữ liệu mới và phiên bản bộ sưu tập

db = khách hàng. Một sốCơ sở dữ liệu

col = db["Một ​​số Bộ sưu tập"]

# thử thực hiện lệnh gọi phương thức find_one() tới bộ sưu tập

cố gắng

one_doc=col. tìm một()

in ("nfind_one(). ", one_doc)

ngoại trừ lỗi. ServerSelectionTimeoutError là lỗi

in ("nfind_one() LỖI. ", sai)

Phần kết luận

Hướng dẫn này giải thích nhiều cách khác nhau để kiểm tra máy chủ MongoDB đang chạy PyMongo Python. Trong đó, bạn đã học cách cố tình đưa ra các ngoại lệ để xác minh rằng kết nối không thành công. Bạn cũng đã khám phá ra cách xác nhận kết nối máy chủ MongoDB hợp lệ

Khi kết nối thành công, cài đặt cổng và miền chính xác đã được chỉ định. Thật tốt khi biết rằng bạn có thể xác minh cài đặt kết nối của mình theo nhiều cách khác nhau. Bây giờ bạn có thể chọn phương pháp nào phù hợp nhất với mình và cũng có một số kỹ thuật sao lưu để chọn

Làm cách nào để kiểm tra trạng thái kết nối trong MongoDB?

Quy trình .
Bắt đầu một thiết bị đầu cuối trong máy chủ chạy máy chủ liên kết
Ban hành lệnh sau. telnet < mongodb_server_name > 28017. Nếu kết nối thành công, bạn sẽ nhận được đầu ra tương tự sau từ lệnh. Đang thử 9. 30. 252. 5. Đã kết nối với 9. 30. 252. 5. Ký tự thoát là '^]'

Tại sao MongoDB không kết nối?

Đảm bảo Phiên bản MongoDB của bạn đang chạy . Đảm bảo rằng bạn đã cài đặt MongoDB và có tiến trình mongod đang chạy. Bạn cũng nên kiểm tra xem cổng mà phiên bản MongoDB của bạn đang chạy có khớp với cổng mà bạn cung cấp trong hộp thoại Compass connect không.

Làm cách nào để tìm các kết nối nhàn rỗi trong MongoDB?

Các kết nối trong MongoDB không bị ràng buộc với một không gian tên cụ thể (cơ sở dữ liệu và/hoặc bộ sưu tập). Mặc dù không có lệnh riêng biệt nào cho phép người vận hành liệt kê tất cả các kết nối máy khách được thiết lập cho một phiên bản MongoDB cụ thể, nhưng bạn có thể sử dụng db. lệnh currentOp() cho mục đích đó.

Có cần phải đóng kết nối MongoDB không?

Không cần phải đóng kết nối một cách rõ ràng . Bằng cách này, ứng dụng tránh tạo và đóng kết nối (đây là một hoạt động tốn kém).

Chủ đề