MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Python và MongoDB:Kết nối với Cơ sở dữ liệu NoSQL

MongoDB là một giải pháp cơ sở dữ liệu NoSQL hướng tới tài liệu và cung cấp khả năng mở rộng và tính linh hoạt tuyệt vời cùng với một hệ thống truy vấn mạnh mẽ. Với MongoDB và Python, bạn có thể phát triển nhiều loại ứng dụng cơ sở dữ liệu khác nhau một cách nhanh chóng. Vì vậy, nếu ứng dụng Python của bạn cần một cơ sở dữ liệu linh hoạt như chính ngôn ngữ, thì MongoDB là dành cho bạn.

Trong hướng dẫn này, bạn sẽ học:

  • Cái gì MongoDB
  • Cách cài đặt và chạy MongoDB
  • Cách làm việc với cơ sở dữ liệu MongoDB
  • Cách sử dụng trình điều khiển PyMongo cấp thấp để giao diện với MongoDB
  • Cách sử dụng trình ánh xạ tài liệu-đối tượng MongoEngine (ODM) cấp cao

Trong suốt hướng dẫn này, bạn sẽ viết một vài ví dụ sẽ chứng minh tính linh hoạt và sức mạnh của MongoDB cũng như hỗ trợ Python tuyệt vời của nó. Để tải xuống mã nguồn cho những ví dụ đó, hãy nhấp vào liên kết bên dưới:

Lấy mã nguồn: Nhấp vào đây để lấy mã nguồn mà bạn sẽ sử dụng để tìm hiểu về cách sử dụng MongoDB với Python trong hướng dẫn này.


Sử dụng Cơ sở dữ liệu SQL so với NoSQL

Trong nhiều thập kỷ, cơ sở dữ liệu SQL là một trong những lựa chọn duy nhất cho các nhà phát triển muốn xây dựng hệ thống cơ sở dữ liệu lớn và có thể mở rộng. Tuy nhiên, nhu cầu ngày càng tăng về việc lưu trữ các cấu trúc dữ liệu phức tạp đã dẫn đến sự ra đời của NoSQL cơ sở dữ liệu. Loại hệ thống cơ sở dữ liệu mới này cho phép các nhà phát triển lưu trữ dữ liệu không đồng nhất và không có cấu trúc một cách hiệu quả.

Nói chung, hệ thống cơ sở dữ liệu NoSQL lưu trữ và truy xuất dữ liệu theo một cách khác nhiều so với hệ quản trị cơ sở dữ liệu quan hệ SQL (RDBMS).

Khi nói đến việc lựa chọn từ các công nghệ cơ sở dữ liệu hiện có, bạn có thể cần phải quyết định giữa việc sử dụng hệ thống SQL hoặc NoSQL. Cả hai đều có các tính năng cụ thể mà bạn nên cân nhắc khi chọn cái này hay cái kia. Dưới đây là một số khác biệt đáng kể hơn của chúng:

Thuộc tính Cơ sở dữ liệu SQL Cơ sở dữ liệu NoSQL
Mô hình dữ liệu Quan hệ Không liên quan
Cấu trúc Dựa trên bảng, với các cột và hàng Dựa trên tài liệu, cặp khóa-giá trị, biểu đồ hoặc cột rộng
Lược đồ Một lược đồ nghiêm ngặt và được xác định trước, trong đó mọi bản ghi (hàng) đều có cùng tính chất và sở hữu các thuộc tính giống nhau Một lược đồ động hoặc schemaless có nghĩa là các bản ghi không cần phải có cùng bản chất
Ngôn ngữ truy vấn Ngôn ngữ truy vấn có cấu trúc (SQL) Khác nhau từ cơ sở dữ liệu sang cơ sở dữ liệu
Khả năng mở rộng Dọc Ngang
Giao dịch ACID Được hỗ trợ Được hỗ trợ, tùy thuộc vào cơ sở dữ liệu NoSQL cụ thể
Khả năng thêm các thuộc tính mới Cần phải thay đổi lược đồ trước Có thể sử dụng mà không làm phiền bất cứ điều gì

Có nhiều sự khác biệt khác giữa hai loại cơ sở dữ liệu, nhưng những cơ sở dữ liệu được đề cập ở trên là một số trong những cơ sở dữ liệu quan trọng hơn cần biết.

Khi chọn một cơ sở dữ liệu, bạn nên xem xét kỹ điểm mạnh và điểm yếu của nó. Bạn cũng cần xem xét cách cơ sở dữ liệu phù hợp với tình huống cụ thể và yêu cầu của ứng dụng của bạn. Đôi khi giải pháp phù hợp là sử dụng kết hợp cơ sở dữ liệu SQL và NoSQL để xử lý các khía cạnh khác nhau của một hệ thống rộng lớn hơn.

Một số ví dụ phổ biến về cơ sở dữ liệu SQL bao gồm:

  • SQLite
  • MySQL
  • Oracle
  • PostgreSQL
  • Máy chủ Microsoft SQL

Các ví dụ về cơ sở dữ liệu NoSQL bao gồm:

  • DynamoDB
  • Cassandra
  • Redis
  • CouchDB
  • Suy nghĩ lạiDB
  • RavenDB
  • MongoDB

Trong những năm gần đây, cơ sở dữ liệu SQL và NoSQL thậm chí đã bắt đầu hợp nhất. Ví dụ:các hệ thống cơ sở dữ liệu, chẳng hạn như PostgreSQL, MySQL và Microsoft SQL Server hiện hỗ trợ lưu trữ và truy vấn dữ liệu JSON, giống như cơ sở dữ liệu NoSQL. Với điều này, giờ đây bạn có thể đạt được nhiều kết quả giống nhau với cả hai công nghệ. Nhưng bạn vẫn không nhận được nhiều tính năng của NoSQL, chẳng hạn như tính năng mở rộng theo chiều ngang và giao diện thân thiện với người dùng.

Với nền tảng ngắn gọn này về cơ sở dữ liệu SQL và NoSQL, bạn có thể tập trung vào chủ đề chính của hướng dẫn này: Cơ sở dữ liệu MongoDB và cách sử dụng nó trong Python.



Quản lý cơ sở dữ liệu NoSQL với MongoDB

MongoDB là một hướng tài liệu cơ sở dữ liệu được phân loại là NoSQL. Nó trở nên phổ biến trong toàn ngành trong những năm gần đây và tích hợp cực kỳ tốt với Python. Không giống như các RDBMS SQL truyền thống, MongoDB sử dụng bộ sưu tập trong tổng số tài liệu thay vì bảng trong số hàng để tổ chức và lưu trữ dữ liệu.

MongoDB lưu trữ dữ liệu trong các tài liệu giống JSON không có khối lượng và linh hoạt. Đây, schemaless có nghĩa là bạn có thể có tài liệu với một nhóm trường khác nhau trong cùng một bộ sưu tập mà không cần phải đáp ứng một bảng lược đồ cứng nhắc .

Bạn có thể thay đổi cấu trúc tài liệu và dữ liệu của mình theo thời gian, điều này dẫn đến một hệ thống linh hoạt cho phép bạn nhanh chóng thích ứng với các thay đổi yêu cầu mà không cần quá trình di chuyển dữ liệu phức tạp. Tuy nhiên, sự đánh đổi trong việc thay đổi cấu trúc của các tài liệu mới là các tài liệu thoát trở nên không phù hợp với lược đồ được cập nhật. Vì vậy, đây là một chủ đề cần được quản lý cẩn thận.

Lưu ý: JSON là viết tắt của JavaScript Object Notation . Đó là định dạng tệp có cấu trúc con người có thể đọc được bao gồm các cặp khóa-giá trị có thể được lồng sâu tùy ý.

MongoDB được viết bằng C ++ và được phát triển tích cực bởi MongoDB Inc. Nó chạy trên tất cả các nền tảng chính, chẳng hạn như macOS, Windows, Solaris và hầu hết các bản phân phối Linux. Nói chung, có ba mục tiêu phát triển chính đằng sau cơ sở dữ liệu MongoDB:

  1. Quy mô tốt
  2. Lưu trữ cấu trúc dữ liệu phong phú
  3. Cung cấp một cơ chế truy vấn phức tạp

MongoDB là một phân phối cơ sở dữ liệu, do đó tính sẵn sàng cao, tỷ lệ mở rộng theo chiều ngang và phân phối địa lý được tích hợp vào hệ thống. Nó lưu trữ dữ liệu trong các tài liệu giống như JSON linh hoạt. Bạn có thể lập mô hình các tài liệu này để ánh xạ các đối tượng trong ứng dụng của mình, điều này giúp bạn có thể làm việc với dữ liệu của mình một cách hiệu quả.

MongoDB cung cấp một ngôn ngữ truy vấn mạnh mẽ hỗ trợ các truy vấn đặc biệt, lập chỉ mục, tổng hợp, tìm kiếm không gian địa lý, tìm kiếm văn bản và hơn thế nữa. Điều này cung cấp cho bạn một bộ công cụ mạnh mẽ để truy cập và làm việc với dữ liệu của bạn. Cuối cùng, MongoDB có sẵn miễn phí và hỗ trợ Python tuyệt vời.


Đánh giá các tính năng của MongoDB

Cho đến nay, bạn đã biết MongoDB là gì và mục tiêu chính của nó là gì. Trong phần này, bạn sẽ tìm hiểu về một số tính năng quan trọng hơn của MongoDB. Về phía quản lý cơ sở dữ liệu, MongoDB cung cấp các tính năng sau:

  • Hỗ trợ truy vấn: Bạn có thể sử dụng nhiều loại truy vấn chuẩn, chẳng hạn như đối sánh (== ), so sánh (< , > ) và biểu thức chính quy.
  • Chỗ ở dữ liệu: Bạn có thể lưu trữ hầu như bất kỳ loại dữ liệu nào, có thể là dữ liệu có cấu trúc, có cấu trúc một phần hoặc thậm chí là đa hình.
  • Khả năng mở rộng: Nó xử lý nhiều truy vấn hơn chỉ bằng cách thêm nhiều máy hơn vào cụm máy chủ.
  • Tính linh hoạt và nhanh nhẹn: Bạn có thể phát triển các ứng dụng với nó một cách nhanh chóng.
  • Hướng tài liệu và tính toán học: Bạn có thể lưu trữ tất cả thông tin về mô hình dữ liệu trong một tài liệu duy nhất.
  • Lược đồ có thể điều chỉnh: Bạn có thể thay đổi giản đồ của cơ sở dữ liệu một cách nhanh chóng, điều này giúp giảm thời gian cần thiết để cung cấp các tính năng mới hoặc khắc phục các sự cố hiện có.
  • Các chức năng của cơ sở dữ liệu quan hệ: Bạn có thể thực hiện các hành động phổ biến đối với cơ sở dữ liệu quan hệ, chẳng hạn như lập chỉ mục.

Đối với mặt hoạt động, MongoDB cung cấp một số công cụ và tính năng mà bạn sẽ không tìm thấy trong các hệ thống cơ sở dữ liệu khác:

  • Khả năng mở rộng: Cho dù bạn cần một máy chủ độc lập hay các cụm máy chủ độc lập hoàn chỉnh, bạn có thể mở rộng MongoDB đến bất kỳ kích thước nào bạn cần.
  • Hỗ trợ cân bằng tải: MongoDB sẽ tự động di chuyển dữ liệu qua nhiều phân đoạn khác nhau.
  • Hỗ trợ chuyển đổi dự phòng tự động: Nếu máy chủ chính của bạn gặp sự cố, thì một máy chủ chính mới sẽ tự động hoạt động.
  • Công cụ quản lý: Bạn có thể theo dõi máy của mình bằng Dịch vụ quản lý MongoDB (MMS) dựa trên đám mây.
  • Hiệu quả bộ nhớ: Nhờ các tệp ánh xạ bộ nhớ, MongoDB thường hiệu quả hơn cơ sở dữ liệu quan hệ.

Tất cả những tính năng này khá hữu ích. Ví dụ:nếu bạn tận dụng tính năng lập chỉ mục, thì phần lớn dữ liệu của bạn sẽ được lưu trong bộ nhớ để truy xuất nhanh chóng. Ngay cả khi không lập chỉ mục các khóa tài liệu cụ thể, MongoDB lưu trữ khá nhiều dữ liệu bằng cách sử dụng kỹ thuật ít được sử dụng gần đây nhất.



Cài đặt và chạy MongoDB

Bây giờ bạn đã quen thuộc với MongoDB, đã đến lúc bạn phải làm bẩn và bắt đầu sử dụng nó. Nhưng trước tiên, bạn cần cài đặt nó trên máy tính của mình. Trang web chính thức của MongoDB cung cấp hai phiên bản của máy chủ cơ sở dữ liệu:

  1. Ấn bản cộng đồng cung cấp mô hình tài liệu linh hoạt cùng với các truy vấn đặc biệt, lập chỉ mục và tổng hợp thời gian thực để cung cấp các cách mạnh mẽ để truy cập và phân tích dữ liệu của bạn. Ấn bản này được cung cấp miễn phí.
  2. Phiên bản dành cho doanh nghiệp cung cấp các tính năng tương tự như phiên bản cộng đồng, cùng với các tính năng nâng cao khác liên quan đến bảo mật và giám sát. Đây là phiên bản thương mại nhưng bạn có thể sử dụng miễn phí trong thời gian không giới hạn cho các mục đích đánh giá và phát triển.

Nếu bạn đang sử dụng Windows, thì bạn có thể đọc qua hướng dẫn cài đặt để biết hướng dẫn đầy đủ. Nói chung, bạn có thể truy cập trang tải xuống, chọn nền tảng Windows trong hộp Tải xuống sẵn có, chọn .msi trình cài đặt phù hợp với hệ thống hiện tại của bạn và nhấp vào Tải xuống .

Chạy trình cài đặt và làm theo hướng dẫn trên màn hình trên trình hướng dẫn cài đặt. Trang này cũng cung cấp thông tin về cách chạy MongoDB dưới dạng dịch vụ Windows.

Nếu bạn đang sử dụng macOS, thì bạn có thể sử dụng Homebrew để cài đặt MongoDB trên hệ thống của mình. Xem hướng dẫn cài đặt để có được hướng dẫn đầy đủ. Ngoài ra, hãy đảm bảo làm theo hướng dẫn để chạy MongoDB dưới dạng dịch vụ macOS.

Nếu bạn đang sử dụng Linux, thì quá trình cài đặt sẽ phụ thuộc vào bản phân phối cụ thể của bạn. Để có hướng dẫn chi tiết về cách cài đặt MongoDB trên các hệ thống Linux khác nhau, hãy truy cập trang hướng dẫn cài đặt và chọn hướng dẫn phù hợp với hệ điều hành hiện tại của bạn. Đảm bảo bạn chạy daemon MongoDB, mongod , khi kết thúc cài đặt.

Cuối cùng, bạn cũng có thể cài đặt MongoDB bằng Docker. Điều này rất hữu ích nếu bạn không muốn làm lộn xộn hệ thống của mình với một cài đặt khác. Nếu bạn thích tùy chọn cài đặt này, thì bạn có thể đọc qua hướng dẫn chính thức và làm theo hướng dẫn của nó. Lưu ý rằng kiến ​​thức trước đây về cách sử dụng Docker sẽ được yêu cầu trong trường hợp này.

Với cơ sở dữ liệu MongoDB được cài đặt và chạy trên hệ thống của bạn, bạn có thể bắt đầu làm việc với cơ sở dữ liệu thực bằng mongo vỏ.




Tạo cơ sở dữ liệu MongoDB với mongo Vỏ

Nếu bạn đã làm theo hướng dẫn cài đặt và chạy, thì bạn đã có một phiên bản MongoDB đang chạy trên hệ thống của mình. Bây giờ bạn có thể bắt đầu tạo và thử nghiệm cơ sở dữ liệu của riêng mình. Trong phần này, bạn sẽ học cách sử dụng mongo shell để tạo, đọc, cập nhật và xóa tài liệu trên cơ sở dữ liệu.


Chạy mongo Vỏ

mongo shell là một giao diện JavaScript tương tác với MongoDB. Bạn có thể sử dụng công cụ này để truy vấn và thao tác dữ liệu của mình cũng như thực hiện các thao tác quản trị. Vì đó là giao diện JavaScript, bạn sẽ không sử dụng ngôn ngữ SQL quen thuộc để truy vấn cơ sở dữ liệu. Thay vào đó, bạn sẽ sử dụng mã JavaScript.

Để khởi chạy mongo shell, mở terminal hoặc dòng lệnh của bạn và chạy lệnh sau:

$ mongo

Lệnh này đưa bạn đến mongo vỏ bọc. Tại thời điểm này, bạn có thể sẽ thấy một loạt các thông báo với thông tin về phiên bản của shell cũng như địa chỉ máy chủ và cổng. Cuối cùng, bạn sẽ thấy lời nhắc shell (> ) để nhập các truy vấn và lệnh.

Bạn có thể chuyển địa chỉ cơ sở dữ liệu làm đối số cho mongo yêu cầu. Bạn cũng có thể sử dụng một số tùy chọn, chẳng hạn như chỉ định máy chủ và cổng để truy cập cơ sở dữ liệu từ xa, v.v. Để biết thêm chi tiết về cách sử dụng mongo , bạn có thể chạy mongo --help .



Thiết lập kết nối

Khi bạn chạy mongo lệnh không có đối số, nó khởi chạy trình bao và kết nối với máy chủ cục bộ mặc định được cung cấp bởi mongod xử lý tại mongod://127.0.0.1:27017 . Điều này có nghĩa là bạn được kết nối với máy chủ cục bộ thông qua cổng 27017 .

Theo mặc định, mongo shell bắt đầu phiên bằng cách thiết lập kết nối với test cơ sở dữ liệu. Bạn có thể truy cập cơ sở dữ liệu hiện tại thông qua db đối tượng:

> db
test
>

Trong trường hợp này, db giữ một tham chiếu đến test , là cơ sở dữ liệu mặc định. Để chuyển đổi cơ sở dữ liệu, hãy sử dụng lệnh use , cung cấp tên cơ sở dữ liệu làm đối số.

Ví dụ:giả sử bạn muốn tạo một trang web để xuất bản nội dung Python và bạn đang lên kế hoạch sử dụng MongoDB để lưu trữ các hướng dẫn và bài viết của mình. Trong trường hợp đó, bạn có thể chuyển sang cơ sở dữ liệu của trang web bằng lệnh sau:

> use rptutorials
switched to db rptutorials

Lệnh này chuyển kết nối của bạn sang rptutorials cơ sở dữ liệu. MongoDB không tạo tệp cơ sở dữ liệu vật lý trên hệ thống tệp cho đến khi bạn chèn dữ liệu thực vào cơ sở dữ liệu. Vì vậy, trong trường hợp này, rptutorials sẽ không hiển thị trong danh sách cơ sở dữ liệu hiện tại của bạn:

> show dbs
admin          0.000GB
config         0.000GB
local          0.000GB
>

mongo shell cung cấp rất nhiều tính năng và tùy chọn. Nó cho phép bạn truy vấn và thao tác dữ liệu của mình cũng như quản lý chính máy chủ cơ sở dữ liệu.

Thay vì sử dụng ngôn ngữ truy vấn chuẩn hóa như SQL, mongo shell sử dụng ngôn ngữ lập trình JavaScript và một API thân thiện với người dùng. API này cho phép bạn sử dụng dữ liệu của mình, đây là chủ đề cho phần tiếp theo.



Tạo Bộ sưu tập và Tài liệu

Cơ sở dữ liệu MongoDB là một vùng chứa vật lý cho các bộ sưu tập tài liệu. Mỗi cơ sở dữ liệu có một bộ tệp riêng trên hệ thống tệp. Các tệp này được quản lý bởi máy chủ MongoDB, máy chủ này có thể xử lý một số cơ sở dữ liệu.

Trong MongoDB, một bộ sưu tập là một nhóm tài liệu . Các bộ sưu tập hơi tương tự như các bảng trong RDBMS truyền thống, nhưng không áp đặt một lược đồ cứng nhắc. Về lý thuyết, mỗi tài liệu trong bộ sưu tập có thể có cấu trúc hoặc tập hợp trường hoàn toàn khác nhau.

Trên thực tế, các tài liệu trong một bộ sưu tập thường chia sẻ một cấu trúc tương tự để cho phép các quy trình truy xuất, chèn và cập nhật đồng nhất. Bạn có thể thực thi cấu trúc tài liệu thống nhất bằng cách sử dụng các quy tắc xác thực tài liệu trong quá trình cập nhật và chèn.

Cho phép các cấu trúc tài liệu khác nhau là một tính năng chính của bộ sưu tập MongoDB. Tính năng này cung cấp tính linh hoạt và cho phép thêm các trường mới vào tài liệu mà không cần sửa đổi lược đồ bảng chính thức.

Để tạo bộ sưu tập bằng mongo shell, bạn cần trỏ db vào cơ sở dữ liệu mục tiêu của bạn và sau đó tạo các bộ sưu tập bằng cách sử dụng ký hiệu dấu chấm :

> use rptutorials
switched to db rptutorials
> db
rptutorials
> db.tutorial
rptutorials.tutorial

Trong ví dụ này, bạn sử dụng ký hiệu dấu chấm để tạo tutorial dưới dạng một bộ sưu tập trong rptutorials , là cơ sở dữ liệu hiện tại của bạn. Điều quan trọng cần lưu ý là MongoDB tạo cơ sở dữ liệu và bộ sưu tập một cách lười biếng . Nói cách khác, chúng chỉ được tạo về mặt vật lý sau khi bạn chèn tài liệu đầu tiên.

Khi bạn có cơ sở dữ liệu và bộ sưu tập, bạn có thể bắt đầu chèn tài liệu. Tài liệu là đơn vị lưu trữ trong MongoDB. Trong RDBMS, điều này sẽ tương đương với một hàng bảng. Tuy nhiên, tài liệu của MongoDB linh hoạt hơn hàng vì chúng có thể lưu trữ thông tin phức tạp, chẳng hạn như mảng, tài liệu nhúng và thậm chí cả mảng tài liệu.

MongoDB lưu trữ tài liệu ở định dạng được gọi là JSON nhị phân (BSON), là một đại diện nhị phân của JSON. Tài liệu của MongoDB bao gồm các cặp trường-và-giá trị và có cấu trúc sau:

{
   field1 → value1,
   field2 → value2,
   field3 → value3,
   ...
   fieldN → valueN
}

Giá trị của một trường có thể là bất kỳ kiểu dữ liệu BSON nào, bao gồm các tài liệu, mảng và mảng tài liệu khác. Trên thực tế, bạn sẽ chỉ định tài liệu của mình bằng định dạng JSON.

Khi bạn đang xây dựng một ứng dụng cơ sở dữ liệu MongoDB, có lẽ quyết định quan trọng nhất của bạn là về cấu trúc của tài liệu. Nói cách khác, bạn sẽ phải quyết định các trường và giá trị mà tài liệu của bạn sẽ có.

Trong trường hợp của các hướng dẫn cho trang web Python của bạn, tài liệu của bạn có thể được cấu trúc như sau:

{
    "title": "Reading and Writing CSV Files in Python",
    "author": "Jon",
    "contributors": [
        "Aldren",
        "Geir Arne",
        "Joanna",
        "Jason"
    ],
    "url": "https://realpython.com/python-csv/"
}

Một tài liệu về cơ bản là một tập hợp các tên thuộc tính và giá trị của chúng. Các giá trị có thể là kiểu dữ liệu đơn giản, chẳng hạn như chuỗi và số, nhưng chúng cũng có thể là mảng, chẳng hạn như contributors trong ví dụ trên.

Mô hình dữ liệu hướng tài liệu của MongoDB biểu thị một cách tự nhiên dữ liệu phức tạp dưới dạng một đối tượng duy nhất. Điều này cho phép bạn làm việc với các đối tượng dữ liệu một cách tổng thể mà không cần phải xem xét một số địa điểm hoặc bảng.

Nếu bạn đang sử dụng RDBMS truyền thống để lưu trữ các hướng dẫn của mình, thì bạn có thể sẽ có một bảng để lưu các hướng dẫn của mình và một bảng khác để lưu các cộng tác viên của bạn. Sau đó, bạn phải thiết lập mối quan hệ giữa cả hai bảng để có thể truy xuất dữ liệu sau này.



Làm việc với Bộ sưu tập và Tài liệu

Cho đến nay, bạn đã biết những điều cơ bản về cách chạy và sử dụng mongo vỏ bọc. Bạn cũng biết cách tạo tài liệu của riêng mình bằng định dạng JSON. Bây giờ đã đến lúc tìm hiểu cách chèn tài liệu vào cơ sở dữ liệu MongoDB của bạn.

Để chèn tài liệu vào cơ sở dữ liệu bằng mongo shell, trước tiên bạn cần chọn một bộ sưu tập và sau đó gọi .insertOne() trên bộ sưu tập với tài liệu của bạn làm đối số:

> use rptutorials
switched to db rptutorials

> db.tutorial.insertOne({
...     "title": "Reading and Writing CSV Files in Python",
...     "author": "Jon",
...     "contributors": [
...         "Aldren",
...         "Geir Arne",
...         "Joanna",
...         "Jason"
...     ],
...     "url": "https://realpython.com/python-csv/"
... })
{
    "acknowledged" : true,
    "insertedId" : ObjectId("600747355e6ea8d224f754ba")
}

Với lệnh đầu tiên, bạn chuyển sang cơ sở dữ liệu mà bạn muốn sử dụng. Lệnh thứ hai là một lệnh gọi phương thức JavaScript để chèn một tài liệu đơn giản vào bộ sưu tập đã chọn, tutorial . Sau khi bạn nhấn Enter , bạn nhận được một thông báo trên màn hình thông báo cho bạn về tài liệu mới được chèn và insertedId của nó .

Giống như cơ sở dữ liệu quan hệ cần khóa chính để xác định duy nhất mọi hàng trong bảng, tài liệu MongoDB cần có _id trường xác định duy nhất tài liệu. MongoDB cho phép bạn nhập _id tùy chỉnh miễn là bạn đảm bảo tính độc đáo của nó. Tuy nhiên, một phương pháp được chấp nhận rộng rãi là cho phép MongoDB tự động chèn một _id cho bạn.

Tương tự, bạn có thể thêm nhiều tài liệu cùng một lúc bằng cách sử dụng .insertMany() :

> tutorial1 = {
...     "title": "How to Iterate Through a Dictionary in Python",
...     "author": "Leodanis",
...     "contributors": [
...         "Aldren",
...         "Jim",
...         "Joanna"
...     ],
...     "url": "https://realpython.com/iterate-through-dictionary-python/"
... }

> tutorial2 = {
...      "title": "Python 3's f-Strings: An Improved String Formatting Syntax",
...      "author": "Joanna",
...      "contributors": [
...          "Adriana",
...          "David",
...          "Dan",
...          "Jim",
...          "Pavel"
...      ],
...      "url": "https://realpython.com/python-f-strings/"
... }

> db.tutorial.insertMany([tutorial1, tutorial2])
{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("60074ff05e6ea8d224f754bb"),
        ObjectId("60074ff05e6ea8d224f754bc")
    ]
}

Đây, lệnh gọi đến .insertMany() lấy một danh sách các hướng dẫn và chèn chúng vào cơ sở dữ liệu. Một lần nữa, đầu ra của trình bao hiển thị thông tin về các tài liệu mới được chèn và _id được thêm tự động của chúng các lĩnh vực.

mongo shell cũng cung cấp các phương thức để thực hiện các thao tác đọc, cập nhật và xóa trên cơ sở dữ liệu. Ví dụ:bạn có thể sử dụng .find() để lấy các tài liệu trong một bộ sưu tập:

> db.tutorial.find()
{ "_id" : ObjectId("600747355e6ea8d224f754ba"),
"title" : "Reading and Writing CSV Files in Python",
"author" : "Jon",
"contributors" : [ "Aldren", "Geir Arne", "Joanna", "Jason" ],
"url" : "https://realpython.com/python-csv/" }
    ...

> db.tutorial.find({author: "Joanna"})
{ "_id" : ObjectId("60074ff05e6ea8d224f754bc"),
"title" : "Python 3's f-Strings: An Improved String Formatting Syntax (Guide)",
"author" : "Joanna",
"contributors" : [ "Adriana", "David", "Dan", "Jim", "Pavel" ],
"url" : "https://realpython.com/python-f-strings/" }

Cuộc gọi đầu tiên tới .find() truy xuất tất cả các tài liệu trong tutorial thu thập. Mặt khác, lệnh gọi thứ hai tới .find() truy xuất những hướng dẫn do Joanna tác giả.

Với kiến ​​thức nền tảng này về cách sử dụng MongoDB thông qua mongo shell, bạn đã sẵn sàng để bắt đầu sử dụng MongoDB với Python. Một vài phần tiếp theo sẽ hướng dẫn bạn các tùy chọn khác nhau để sử dụng cơ sở dữ liệu MongoDB trong các ứng dụng Python của bạn.




Sử dụng MongoDB với Python và PyMongo

Bây giờ bạn đã biết MongoDB là gì và cách tạo và quản lý cơ sở dữ liệu bằng mongo shell, bạn có thể bắt đầu sử dụng MongoDB, nhưng lần này là với Python. MongoDB cung cấp một trình điều khiển Python chính thức có tên là PyMongo.

Trong phần này, bạn sẽ xem qua một số ví dụ sẽ giúp bạn hiểu cách sử dụng PyMongo để tạo các ứng dụng cơ sở dữ liệu của riêng bạn với MongoDB và Python.

Mỗi mô-đun trong PyMongo chịu trách nhiệm về một tập hợp các hoạt động trên cơ sở dữ liệu. Bạn sẽ có các mô-đun cho ít nhất các tác vụ sau:

  • Thiết lập kết nối cơ sở dữ liệu
  • Làm việc với cơ sở dữ liệu
  • Làm việc với các bộ sưu tập và tài liệu
  • Thao tác với con trỏ
  • Làm việc với mã hóa dữ liệu

Nói chung, PyMongo cung cấp một bộ công cụ phong phú mà bạn có thể sử dụng để giao tiếp với máy chủ MongoDB. Nó cung cấp chức năng để truy vấn, truy xuất kết quả, ghi và xóa dữ liệu cũng như chạy các lệnh cơ sở dữ liệu.


Cài đặt PyMongo

Để bắt đầu sử dụng PyMongo, trước tiên bạn cần cài đặt nó trong môi trường Python của mình. Bạn có thể sử dụng môi trường ảo hoặc bạn có thể sử dụng cài đặt Python trên toàn hệ thống của mình, mặc dù tùy chọn đầu tiên được ưu tiên hơn. PyMongo có sẵn trên PyPI, vì vậy cách nhanh nhất để cài đặt nó là sử dụng pip . Khởi động thiết bị đầu cuối của bạn và chạy lệnh sau:

$ pip install pymongo==3.11.2

Sau một vài lần tải xuống và các bước liên quan khác, lệnh này sẽ cài đặt PyMongo trên môi trường Python của bạn. Lưu ý rằng nếu bạn không cung cấp số phiên bản cụ thể thì pip sẽ cài đặt phiên bản mới nhất hiện có.

Lưu ý: Để có hướng dẫn đầy đủ về cách cài đặt PyMongo, hãy xem trang Cài đặt / Nâng cấp trong tài liệu chính thức của nó.

Sau khi hoàn tất quá trình cài đặt, bạn có thể bắt đầu phiên tương tác Python và chạy quá trình nhập sau:

>>>
>>> import pymongo

Nếu điều này chạy mà không tạo ra một ngoại lệ trong Python shell, thì quá trình cài đặt của bạn vẫn hoạt động tốt. Nếu không, hãy cẩn thận thực hiện lại các bước.



Thiết lập kết nối

Để thiết lập kết nối với cơ sở dữ liệu, bạn cần tạo MongoClient ví dụ. Lớp này cung cấp một máy khách cho một phiên bản hoặc máy chủ MongoDB. Mỗi đối tượng máy khách có một nhóm kết nối tích hợp, theo mặc định xử lý lên đến một trăm kết nối đến máy chủ.

Quay lại phiên tương tác Python của bạn và nhập MongoClient từ pymongo . Sau đó, tạo một đối tượng khách hàng để giao tiếp với phiên bản MongoDB hiện đang chạy của bạn:

>>>
>>> from pymongo import MongoClient
>>> client = MongoClient()
>>> client
MongoClient(host=['localhost:27017'], ..., connect=True)

Đoạn mã trên thiết lập kết nối với máy chủ mặc định (localhost ) và cổng (27017 ). MongoClient nhận một tập hợp các đối số cho phép bạn chỉ định máy chủ lưu trữ tùy chỉnh, cổng và các tham số kết nối khác. Ví dụ:để cung cấp một máy chủ và cổng tùy chỉnh, bạn có thể sử dụng mã sau:

>>>
>>> client = MongoClient(host="localhost", port=27017)

Điều này rất hữu ích khi bạn cần cung cấp hostport khác với thiết lập mặc định của MongoDB. Bạn cũng có thể sử dụng định dạng MongoDB URI:

>>>
>>> client = MongoClient("mongodb://localhost:27017")

Tất cả các phiên bản này của MongoClient cung cấp cùng một thiết lập ứng dụng khách để kết nối phiên bản MongoDB hiện tại của bạn. Cái nào bạn nên sử dụng chỉ phụ thuộc vào mức độ rõ ràng bạn muốn thể hiện trong mã của mình.

Sau khi bạn đã khởi tạo MongoClient , bạn có thể sử dụng phiên bản của nó để tham chiếu đến kết nối cơ sở dữ liệu cụ thể đó, giống như bạn đã làm với mongo của shell’s db đối tượng trong phần trên.



Làm việc với Cơ sở dữ liệu, Bộ sưu tập và Tài liệu

Sau khi bạn có một bản sao được kết nối của MongoClient , bạn có thể truy cập bất kỳ cơ sở dữ liệu nào được quản lý bởi máy chủ MongoDB được chỉ định. Để xác định cơ sở dữ liệu nào bạn muốn sử dụng, bạn có thể sử dụng ký hiệu dấu chấm giống như bạn đã làm trong mongo vỏ:

>>>
>>> db = client.rptutorials
>>> db
Database(MongoClient(host=['localhost:27017'], ..., connect=True), 'rptutorials')

Trong trường hợp này, rptutorials là tên của cơ sở dữ liệu mà bạn sẽ làm việc. Nếu cơ sở dữ liệu không tồn tại, thì MongoDB sẽ tạo nó cho bạn, nhưng chỉ khi bạn thực hiện thao tác đầu tiên trên cơ sở dữ liệu.

Bạn cũng có thể sử dụng quyền truy cập kiểu từ điển nếu tên của cơ sở dữ liệu không phải là mã định danh Python hợp lệ:

>>>
>>> db = client["rptutorials"]

Câu lệnh này rất hữu ích khi tên cơ sở dữ liệu của bạn không phải là mã định danh Python hợp lệ. Ví dụ:nếu cơ sở dữ liệu của bạn có tên là rp-tutorials , thì bạn cần sử dụng quyền truy cập kiểu từ điển.

Lưu ý: Khi bạn sử dụng mongo shell, bạn có quyền truy cập vào cơ sở dữ liệu thông qua db đối tượng toàn cục. Khi bạn sử dụng PyMongo, bạn có thể gán cơ sở dữ liệu cho một biến có tên là db để có được hành vi tương tự.

Lưu trữ dữ liệu trong cơ sở dữ liệu của bạn bằng PyMongo tương tự như những gì bạn đã làm với mongo shell trong các phần trên. Nhưng trước tiên, bạn cần tạo tài liệu của mình. Trong Python, bạn sử dụng từ điển để tạo tài liệu:

>>>
>>> tutorial1 = {
...     "title": "Working With JSON Data in Python",
...     "author": "Lucas",
...     "contributors": [
...         "Aldren",
...         "Dan",
...         "Joanna"
...     ],
...     "url": "https://realpython.com/python-json/"
... }

Khi bạn đã tạo tài liệu dưới dạng từ điển, bạn cần chỉ định bộ sưu tập nào bạn muốn sử dụng. Để làm điều đó, bạn có thể sử dụng ký hiệu dấu chấm trên đối tượng cơ sở dữ liệu:

>>>
>>> tutorial = db.tutorial
>>> tutorial
Collection(Database(..., connect=True), 'rptutorials'), 'tutorial')

Trong trường hợp này, tutorial là một bản sao của Collection và đại diện cho một bộ sưu tập tài liệu vật lý trong cơ sở dữ liệu của bạn. Bạn có thể chèn tài liệu vào tutorial bằng cách gọi .insert_one() trên đó với một tài liệu làm đối số:

>>>
>>> result = tutorial.insert_one(tutorial1)
>>> result
<pymongo.results.InsertOneResult object at 0x7fa854f506c0>

>>> print(f"One tutorial: {result.inserted_id}")
One tutorial: 60084b7d87eb0fbf73dbf71d

Đây, .insert_one() lấy tutorial1 , chèn nó vào tutorial thu thập và trả về một InsertOneResult vật. Đối tượng này cung cấp phản hồi về tài liệu được chèn. Lưu ý rằng vì MongoDB tạo ObjectId động, đầu ra của bạn sẽ không khớp với ObjectId hiển thị ở trên.

Nếu bạn có nhiều tài liệu cần thêm vào cơ sở dữ liệu, thì bạn có thể sử dụng .insert_many() để chèn chúng một lần:

>>>
>>> tutorial2 = {
...     "title": "Python's Requests Library (Guide)",
...     "author": "Alex",
...     "contributors": [
...         "Aldren",
...         "Brad",
...         "Joanna"
...     ],
...     "url": "https://realpython.com/python-requests/"
... }

>>> tutorial3 = {
...     "title": "Object-Oriented Programming (OOP) in Python 3",
...     "author": "David",
...     "contributors": [
...         "Aldren",
...         "Joanna",
...         "Jacob"
...     ],
...     "url": "https://realpython.com/python3-object-oriented-programming/"
... }

>>> new_result = tutorial.insert_many([tutorial2, tutorial3])

>>> print(f"Multiple tutorials: {new_result.inserted_ids}")
Multiple tutorials: [
   ObjectId('6008511c87eb0fbf73dbf71e'),
   ObjectId('6008511c87eb0fbf73dbf71f')
]

Điều này nhanh hơn và đơn giản hơn so với gọi .insert_one() nhiều lần. Cuộc gọi đến .insert_many() lấy tài liệu có thể lặp lại và chèn chúng vào tutorial bộ sưu tập trong rptutorials của bạn cơ sở dữ liệu. Phương thức trả về một bản sao của InsertManyResult , cung cấp thông tin về các tài liệu được chèn.

Để truy xuất tài liệu từ một bộ sưu tập, bạn có thể sử dụng .find() . Không có đối số, .find() trả về Cursor đối tượng cung cấp các tài liệu trong bộ sưu tập theo yêu cầu:

>>>
>>> import pprint

>>> for doc in tutorial.find():
...     pprint.pprint(doc)
...
{'_id': ObjectId('600747355e6ea8d224f754ba'),
 'author': 'Jon',
 'contributors': ['Aldren', 'Geir Arne', 'Joanna', 'Jason'],
 'title': 'Reading and Writing CSV Files in Python',
 'url': 'https://realpython.com/python-csv/'}
    ...
{'_id': ObjectId('6008511c87eb0fbf73dbf71f'),
 'author': 'David',
 'contributors': ['Aldren', 'Joanna', 'Jacob'],
 'title': 'Object-Oriented Programming (OOP) in Python 3',
 'url': 'https://realpython.com/python3-object-oriented-programming/'}

Here, you run a loop on the object that .find() returns and print successive results, using pprint.pprint() to provide a user-friendly output format.

You can also use .find_one() to retrieve a single document. In this case, you can use a dictionary that contains fields to match. For example, if you want to retrieve the first tutorial by Jon, then you can do something like this:

>>>
>>> import pprint

>>> jon_tutorial = tutorial.find_one({"author": "Jon"})

>>> pprint.pprint(jon_tutorial)
{'_id': ObjectId('600747355e6ea8d224f754ba'),
 'author': 'Jon',
 'contributors': ['Aldren', 'Geir Arne', 'Joanna', 'Jason'],
 'title': 'Reading and Writing CSV Files in Python',
 'url': 'https://realpython.com/python-csv/'}

Note that the tutorial’s ObjectId is set under the _id key, which is the unique document identifier that MongoDB automatically adds when you insert a document into your database.

PyMongo also provides methods to replace, update, and delete documents from a database. If you want to dive deeper into these features, then take a look at the documentation for Collection .



Closing Connections

Establishing a connection to a MongoDB database is typically an expensive operation. If you have an application that constantly retrieves and manipulates data in a MongoDB database, then you probably don’t want to be opening and closing the connection all the time since this might affect your application’s performance.

In this kind of situation, you should keep your connection alive and only close it before exiting the application to clear all the acquired resources. You can close the connection by calling .close() on the MongoClient instance:

>>>
>>> client.close()

Another situation is when you have an application that occasionally uses a MongoDB database. In this case, you might want to open the connection when needed and close it immediately after use for freeing the acquired resources. A consistent approach to this problem would be to use the with tuyên bố. Yes, MongoClient implements the context manager protocol:

>>>
>>> import pprint
>>> from pymongo import MongoClient

>>> with MongoClient() as client:
...     db = client.rptutorials
...     for doc in db.tutorial.find():
...         pprint.pprint(doc)
...
{'_id': ObjectId('600747355e6ea8d224f754ba'),
 'author': 'Jon',
 'contributors': ['Aldren', 'Geir Arne', 'Joanna', 'Jason'],
 'title': 'Reading and Writing CSV Files in Python',
 'url': 'https://realpython.com/python-csv/'}
    ...
{'_id': ObjectId('6008511c87eb0fbf73dbf71f'),
 'author': 'David',
 'contributors': ['Aldren', 'Joanna', 'Jacob'],
 'title': 'Object-Oriented Programming (OOP) in Python 3',
 'url': 'https://realpython.com/python3-object-oriented-programming/'}

If you use the with statement to handle your MongoDB client, then at the end of the with code block, the client’s .__exit__() method gets called, which at the same time closes the connection by calling .close() .




Using MongoDB With Python and MongoEngine

While PyMongo is a great and powerful Python driver for interfacing with MongoDB, it’s probably a bit too low-level for many of your projects. With PyMongo, you’ll have to write a lot of code to consistently insert, retrieve, update, and delete documents.

One library that provides a higher abstraction on top of PyMongo is MongoEngine. MongoEngine is an object-document mapper (ODM), which is roughly equivalent to an SQL-based object-relational mapper (ORM). MongoEngine provides a class-based abstraction, so all the models you create are classes.


Installing MongoEngine

There are a handful of Python libraries to help you work with MongoDB. MongoEngine, however, is a popular one that provides a nice set of features, flexibility, and community support. MongoEngine is available on PyPI. You can install it using the following pip command:

$ pip install mongoengine==0.22.1

Once you’ve installed MongoEngine into your Python environment, you’re ready to start working with MongoDB databases using Python’s object-oriented features. The next step is to connect to your running MongoDB instance.



Establishing a Connection

To establish a connection with your database, you need to use mongoengine.connect() . This function takes several arguments. However, in this tutorial, you’ll use only three of them. Within your Python interactive session, type the following code:

>>>
>>> from mongoengine import connect
>>> connect(db="rptutorials", host="localhost", port=27017)
MongoClient(host=['localhost:27017'], ..., read_preference=Primary())

Here, you first set the database name db to "rptutorials" , which is the name of the database you want to work in. Then you provide a host and a port to connect to your current MongoDB instance. Since you’re using the default host and port , you can omit these two parameters and just use connect("rptutorials") .



Working With Collections and Documents

To create documents with MongoEngine, you first need to define what data you want the documents to have. In other words, you need to define a document schema. MongoEngine encourages you to define a document schema to help you reduce coding errors and to allow you to define utility or helper methods.

Similar to ORMs, ODMs like MongoEngine provide a base or model class for you to define a document schema. In ORMs, that class is equivalent to a table, and its instances are equivalent to rows. In MongoEngine, the class is equivalent to a collection, and its instances are equivalent to documents.

To create a model, you need to subclass Document and provide the required fields as class attributes. To continue with the blog example, here’s how you can create a model for your tutorials:

>>>
>>> from mongoengine import Document, ListField, StringField, URLField

>>> class Tutorial(Document):
...     title = StringField(required=True, max_length=70)
...     author = StringField(required=True, max_length=20)
...     contributors = ListField(StringField(max_length=20))
...     url = URLField(required=True)

With this model, you tell MongoEngine that you expect a Tutorial document to have a .title , an .author , a list of .contributors , and a .url . The base class, Document , uses that information along with the field types to validate the input data for you.

Note: One of the more difficult tasks with database models is data validation . How do you make sure that the input data conforms to your format requirements? That’s one of the reasons for you to have a coherent and uniform document schema.

MongoDB is said to be a schemaless database, but that doesn’t mean it’s schema free. Having documents with a different schema within the same collection can lead to processing errors and inconsistent behavior.

For example, if you try to save a Tutorial object without a .title , then your model throws an exception and lets you know. You can take this even further and add more restrictions, such as the length of the .title , and so on.

There are a few general parameters that you can use to validate fields. Here are some of the more commonly used parameters:

  • db_field specifies a different field name.
  • required ensures that the field is provided.
  • default provides a default value for a given field if no value is given.
  • unique ensures that no other document in the collection has the same value for this field.

Each specific field type also has its own set of parameters. You can check the documentation for a complete guide to the available field types.

To save a document to your database, you need to call .save() on a document object. If the document already exists, then all the changes will be applied to the existing document. If the document doesn’t exist, then it’ll be created.

Here’s an example of creating and saving a tutorial into your sample tutorials database:

>>>
>>> tutorial1 = Tutorial(
...     title="Beautiful Soup: Build a Web Scraper With Python",
...     author="Martin",
...     contributors=["Aldren", "Geir Arne", "Jaya", "Joanna", "Mike"],
...     url="https://realpython.com/beautiful-soup-web-scraper-python/"
... )

>>> tutorial1.save()  # Insert the new tutorial
<Tutorial: Tutorial object>

By default, .save() inserts the new document into a collection named after the model class, Tutorial , except using lowercase letters. In this case, the collection name is tutorial , which matches the collection you’ve been using to save your tutorials.

PyMongo performs data validation when you call .save() . This means that it checks the input data against the schema you declared in the Tutorial model class. If the input data violates the schema or any of its constraints, then you get an exception, and the data isn’t saved into the database.

For example, here’s what happens if you try to save a tutorial without providing a .title :

>>>
>>> tutorial2 = Tutorial()
>>> tutorial2.author = "Alex"
>>> tutorial2.contributors = ["Aldren", "Jon", "Joanna"]
>>> tutorial2.url = "https://realpython.com/convert-python-string-to-int/"
>>> tutorial2.save()
Traceback (most recent call last):
  ...
mongoengine.errors.ValidationError: ... (Field is required: ['title'])

In this example, first note that you can also build a Tutorial object by assigning values to its attributes. Second, since you don’t provide a .title for the new tutorial, .save() raises a ValidationError telling you that the .title field is required. Having automatic data validation is a great feature that will save you some headaches.

Each Document subclass has an .objects attribute that you can use to access the documents in the associated collection. For example, here’s how you can print the .title of all your current tutorials:

>>>
>>> for doc in Tutorial.objects:
...     print(doc.title)
...
Reading and Writing CSV Files in Python
How to Iterate Through a Dictionary in Python
Python 3's f-Strings: An Improved String Formatting Syntax (Guide)
Working With JSON Data in Python
Python's Requests Library (Guide)
Object-Oriented Programming (OOP) in Python 3
Beautiful Soup: Build a Web Scraper With Python

The for loop iterates over all your tutorials and prints their .title data to the screen. You can also use .objects to filter your documents. For example, say you want to retrieve the tutorials authored by Alex. In that case, you can do something like this:

>>>
>>> for doc in Tutorial.objects(author="Alex"):
...     print(doc.title)
...
Python's Requests Library (Guide)

MongoEngine is well suited to manage your MongoDB databases for just about any type of application. Its features make it ideal for creating efficient and scalable programs using a high-level approach. If you’re looking for more information about MongoEngine, be sure to check out its user guide.




Conclusion

If you need a robust, scalable, and flexible database solution, then MongoDB might be a good option for you. MongoDB is a mature and popular NoSQL database with great Python support. With a good understanding of how to access MongoDB with Python, you’ll be ready to create database applications that scale well and provide excellent performance.

With MongoDB, you also have the benefit of a human-readable and highly-flexible data model, so you can adapt to requirement changes quickly.

In this tutorial, you learned:

  • What MongoDB and NoSQL databases are
  • How to install and run MongoDB on your system
  • How to create and work with MongoDB databases
  • How to interface with MongoDB in Python using the PyMongo driver
  • How to use the MongoEngine object-document mapper to work with MongoDB

The examples you coded in this tutorial are available for download. To get their source code, click the link below:

Get the Source Code: Click here to get the source code you’ll use to learn about using MongoDB with Python in this tutorial.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Khởi tạo toàn cầu không thành công:BadValue Không hợp lệ hoặc không có ngôn ngữ người dùng được đặt. Hãy đảm bảo các biến môi trường LANG và / hoặc LC_ * được đặt chính xác

  2. Lợi thế của việc sử dụng ObjectId thay vì một Chuỗi đơn giản là gì?

  3. Làm cách nào để chạy MongoDB dưới dạng dịch vụ Windows?

  4. Truy vấn dữ liệu từ MongoDB bằng GraphQL trong Django:Get-Go (1)

  5. Chế nhạo cơ sở dữ liệu trong node.js?