Hướng dẫn django and mongodb medium - phương tiện django và mongodb

Có ba cách khác nhau để kết nối Django với MongoDB

  1. Mongoengine: MongoEngine là một kẻ lừa đảo đối tượng Python. Nó tương tự như quan hệ đối tượng-mapper trong cơ sở dữ liệu quan hệ. Mongoengine có API khai báo dễ học và sử dụng.: MongoEngine is a Python Object-Document-Mapper. It’s similar to Object-Relational-Mapper in relational databases. MongoEngine has a declarative API that is easy to learn and use.
  2. Djongo: Nếu bạn đang sử dụng cơ sở dữ liệu quan hệ như SQL và muốn di chuyển sang MongoDB, vì điều đó bạn có thể sử dụng Djongo. Không thay đổi Django Orm, Djongo chuyển tất cả các truy vấn SQL sang các truy vấn cú pháp MongoDB.: If you are using a relational database like SQL and want to migrate to MongoDB, for that you can use Djongo. Without changing the Django ORM, Djongo transpiles all the SQL queries to MongoDB syntax queries.

Sử dụng pymongo

Pymongo là một phân phối Python có chứa các công cụ để làm việc với MongoDB. Pymongo rất tốt để viết và lưu dữ liệu JSON vào MongoDB của bạn, Pymongo sẽ cho phép bạn sử dụng tất cả các truy vấn Mongo trong mã Python của bạn. is a Python distribution containing tools for working with MongoDB. PyMongo is great for writing and saving JSON data to your MongoDB, PyMongo will let you use all of the mongo queries in your python code.

Cài đặt pymongo bằng cách sử dụng lệnh

pip install pymongo

Tạo tệp Utils.py trong thư mục dự án của bạn và mã sau

from pymongo import MongoClient
def get_db_handle(db_name, host, port, username, password):
client = MongoClient(host=host,
port=int(port),
username=username,
password=password
)
db_handle = client[db_name]
return db_handle, client

def get_collection_handle(db_handle, collection_name):
return db_handle[collection_name]

Các phương pháp trên có thể được sử dụng trong các chế độ xem để vận hành MongoDB của bạn.

Sử dụng Mongoengine

Mongoengine là một lớp ORM trên đỉnh của pymongo. Vì vậy, bạn vẫn cần pymongo (> = 3,4) trên hệ thống của bạn để sử dụng Mongoengine.

Sử dụng Mongoengine để kết nối Django và MongoDB cung cấp cho bạn các trường như Listfield và Dictfield để xử lý dữ liệu JSON không có cấu trúc khổng lồ.

Đầu tiên, cài đặt Mongoengine bằng cách sử dụng:

pip install mongoengine

Thêm mã sau trong Cài đặt.Py của thư mục dự án của bạn và xóa hoặc nhận xét phần cơ sở dữ liệu

import mongoengine
mongoengine.connect(db=DATABASE_NAME, host=DATABASE_HOST, username=USERNAME, password=PASSWORD)
#DATABASES = {
# 'default': {
# 'ENGINE': 'djongo', #'django.db.backends.sqlite3',
# 'NAME': 'blogs', # DB name
# 'USER': 'root', # DB User name <optional>
# }
#}

Thêm model.py

from mongoengine import Document, fieldsclass Blogs(Document):
name = fields.StringField()
topic = fields.StringField()
date = fields.DateTimeField()
addition_info = fields.DictField()

Lưu ý:

from pymongo import MongoClient
def get_db_handle(db_name, host, port, username, password):
client = MongoClient(host=host,
port=int(port),
username=username,
password=password
)
db_handle = client[db_name]
return db_handle, client

def get_collection_handle(db_handle, collection_name):
return db_handle[collection_name]

4and
from pymongo import MongoClient
def get_db_handle(db_name, host, port, username, password):
client = MongoClient(host=host,
port=int(port),
username=username,
password=password
)
db_handle = client[db_name]
return db_handle, client

def get_collection_handle(db_handle, collection_name):
return db_handle[collection_name]

5 là không cần thiết vì bạn không sử dụng Django Orm ở đây.
from pymongo import MongoClient
def get_db_handle(db_name, host, port, username, password):
client = MongoClient(host=host,
port=int(port),
username=username,
password=password
)
db_handle = client[db_name]
return db_handle, client

def get_collection_handle(db_handle, collection_name):
return db_handle[collection_name]

4and
from pymongo import MongoClient
def get_db_handle(db_name, host, port, username, password):
client = MongoClient(host=host,
port=int(port),
username=username,
password=password
)
db_handle = client[db_name]
return db_handle, client

def get_collection_handle(db_handle, collection_name):
return db_handle[collection_name]

5 is not needed since you are not using Django ORM here.

Sử dụng Djongo

Djongo là một cải tiến đối với Pymongo ở chỗ các nhà phát triển không cần phải viết các truy vấn dài. Nó ánh xạ các đối tượng Python thành các tài liệu MongoDB, tức là, ánh xạ tài liệu đối tượng (ODM).

Để cài đặt Djongo

pip install djongo

Bây giờ trong cài đặt.py của thư mục dự án của bạn chỉnh sửa cài đặt cơ sở dữ liệu

DATABASES = {    'default': {        'ENGINE': 'djongo',        'NAME': 'your-db-name',        'ENFORCE_SCHEMA': False,        'CLIENT': {            'host': 'mongodb+srv://<username>:<password>@<atlas  cluster>/<myFirstDatabase>?retryWrites=true&w=majority'        }    }}

Bây giờ chạy

python manage.py makemigrations <app-name>python manage.py migrate

Bước tiếp theo

Bây giờ chúng ta đã biết các cách khác nhau để kết nối Django và MongoDB, chúng ta phải chọn đúng cho dự án của mình. Các cách tiếp cận có ưu và nhược điểm riêng của họ.

Ví dụ: nếu bạn đang bắt đầu từ đầu, Mongoengine là một cách tốt để đi, vì nó có thể dễ dàng đối phó với nhiều dữ liệu không có cấu trúc. Nếu bạn có nhiều truy vấn phức tạp để viết trong ứng dụng của mình, bạn nên đi với pymongo.

Djongo phù hợp hơn nếu bạn có một dự án Django cần di chuyển sang MongoDB từ cơ sở dữ liệu khác, vì điều đó sẽ yêu cầu số lượng thay đổi mã ít nhất.

Để sử dụng MongoDB làm cơ sở dữ liệu phụ trợ của bạn trong dự án Django của bạn, chỉ cần thêm một dòng này vào tệp cài đặt của bạn.this one line into your settings.py file:

DATABASES = {
‘default’: {
‘ENGINE’: ‘djongo’,
‘NAME’: ‘your-db-name’,
}
}

Nó đơn giản mà!

Tiếp theo, đăng nhập vào nhà quản trị của bạn (localhost: 8000/admin/) và bắt đầu thêm các tài liệu nhúng của Google vào MongoDB bằng GUI quản trị viên:

Vào tháng 10 năm 2017 MongoDB đã hoàn thành bước cuối cùng trong công khai, định giá IPO của mình ở mức 24 đô la và tăng 192 triệu đô la trong quá trình này. Tài chính của công ty đang tăng trưởng đều đặn:

MongoDB cung cấp phần mềm cơ sở dữ liệu có nguồn mở. Điều này rất hữu ích cho các công ty khởi nghiệp giai đoạn đầu đang tìm cách ra mắt trong khi bị hạn chế bởi ngân sách eo hẹp. Một đánh giá về xu hướng tìm kiếm của Google cho MongoDB cho thấy sự gia tăng ổn định về sự quan tâm.

Xu hướng của Google - Thuật ngữ tìm kiếm: MongoDB

MongoDB ngày càng trở thành một phần mềm cơ sở dữ liệu phổ biến để làm việc. Cơ sở dữ liệu và hệ thống quản lý cơ sở dữ liệu (DBM) đã tồn tại trong hơn năm thập kỷ. Chúng nổi lên vào đầu những năm 1960, và hương vị phổ biến nhất là hệ thống cơ sở dữ liệu quan hệ.

Nhưng MongoDB đi xung quanh tự gọi mình là một hệ thống cơ sở dữ liệu phi quan hệ của người Hồi giáo và đã đưa ra những tuyên bố cao về cách tiếp cận của nó để lưu trữ dữ liệu. Vì vậy, chính xác thì vấn đề lớn ở đây là gì?

MongoDB vs SQL

Khá nhiều tất cả các hệ thống cơ sở dữ liệu quan hệ đều sử dụng ngôn ngữ truy vấn có cấu trúc (SQL) (hoặc phiên bản điều chỉnh của nó) để liên lạc với phần mềm quản lý dữ liệu. Một số khóa học đại học chỉ dành riêng cho sự hiểu biết và làm chủ cú pháp SQL.

SQL đã trở thành ngôn ngữ phi thực tế để làm việc với bất kỳ phần mềm cơ sở dữ liệu (DB) nào, nguồn mở hoặc nguồn mở. Sau đó, MongoDB đã xuất hiện và quyết định thể hiện sự coi thường ngôn ngữ quyền lực cổ xưa này và giới thiệu cú pháp truy vấn của chính nó.

Ngôn ngữ là của Mordor mà tôi sẽ không thốt ra ở đây. Trong tiếng nói chung, nó nói, một chiếc nhẫn để cai trị tất cả. Một chiếc nhẫn để tìm thấy chúng. Một chiếc nhẫn để mang tất cả và trong bóng tối ràng buộc họ.

-Gandalf (từ Chúa tể của những chiếc nhẫn)

MongoDB Schemaless vs SQL lược đồ: Trong cơ sở dữ liệu SQL, nó không thể thêm dữ liệu cho đến khi bạn xác định các bảng và loại trường trong những gì mà Lọ gọi là lược đồ. Trong cơ sở dữ liệu MongoDB, dữ liệu có thể được thêm vào bất cứ nơi nào, bất cứ lúc nào. Không cần phải chỉ định thiết kế tài liệu hoặc thậm chí là một bộ sưu tập phía trước.In an SQL database, it’s impossible to add data until you define tables and field types in what’s referred to as a schema. In a MongoDB database, data can be added anywhere, at any time. There’s no need to specify a document design or even a collection up-front.

Tài liệu MongoDB so với Bảng SQL: Cơ sở dữ liệu SQL cung cấp một kho các bảng dữ liệu liên quan. Mỗi hàng là một bản ghi khác nhau. Thiết kế cứng nhắc: Bạn không thể sử dụng cùng một bảng để lưu trữ thông tin khác nhau hoặc chèn một chuỗi nơi dự kiến ​​một số.SQL databases provide a store of related data tables. Every row is a different record. The design is rigid: you cannot use the same table to store different information or insert a string where a number is expected.

Cơ sở dữ liệu MongoDB lưu trữ các tài liệu cặp giá trị trường giống như JSON. Các tài liệu tương tự có thể được lưu trữ trong một bộ sưu tập, tương tự như bảng SQL. Tuy nhiên, bạn có thể lưu trữ bất kỳ dữ liệu nào bạn thích trong bất kỳ tài liệu nào - MongoDB đã giành được khiếu nại. Các bảng SQL tạo ra một mẫu dữ liệu nghiêm ngặt, do đó, rất khó để phạm sai lầm. MongoDB linh hoạt và tha thứ hơn, nhưng có thể lưu trữ bất kỳ dữ liệu nào ở bất cứ đâu có thể dẫn đến các vấn đề nhất quán.

Có rất nhiều nội dung trực tuyến có sẵn lập luận rằng MongoDB không phải là siêu SQL. Các ứng dụng chạy trên SQL không thể được chuyển sang MongoDB. Tôi đang đi ra ngoài ở đây để tuyên bố rằng, trong bối cảnh Django, MongoDB là một siêu sao của SQL.MongoDB is a superset of SQL.

Vậy tại sao niềm tin phổ biến, MongoDB không phải là một siêu SQL, tồn tại để bắt đầu?

MongoDB yêu cầu phân xử dữ liệu: trong MongoDB không có hỗ trợ tham gia. Điều này có nghĩa là chúng tôi sẽ phải từ chối các tài liệu của chúng tôi. Các tài liệu bị phân loại hóa dẫn đến các truy vấn nhanh hơn, nhưng việc cập nhật thông tin trường tài liệu trong nhiều tài liệu bị phân loại sẽ chậm hơn đáng kể. In MongoDb there is no JOIN support. This means we will have to denormalize our documents. Denormalized documents leads to faster queries, but updating the document field information in multiple denormalized documents will be significantly slower.

Không có sự tham gia: Truy vấn SQL cung cấp một điều khoản tham gia mạnh mẽ. Chúng ta có thể có được dữ liệu liên quan trong nhiều bảng bằng cách sử dụng một câu lệnh SQL. Trong các cơ sở dữ liệu phi quan hệ như MongoDB, không có sự tham gia nào như sẽ có trong cơ sở dữ liệu quan hệ. Điều này có nghĩa là bạn cần thực hiện nhiều truy vấn và tham gia dữ liệu theo cách thủ công trong mã của bạn.: SQL queries offer a powerful JOIN clause. We can obtain related data in multiple tables using a single SQL statement. In non-relational databases like MongoDB, there are no JOINs like there would be in relational databases. This means you need to perform multiple queries and join the data manually within your code.

Không có giao dịch: Trong cơ sở dữ liệu SQL, hai hoặc nhiều cập nhật có thể được thực hiện trong một giao dịch-một trình bao bọc tất cả hoặc không có gì đảm bảo thành công hoặc thất bại. Nếu chúng tôi thực hiện hai bản cập nhật riêng lẻ, người ta có thể thành công và thất bại khác - do đó khiến các số liệu của chúng tôi không đồng bộ. Đặt cùng một bản cập nhật trong một giao dịch đảm bảo cả hai thành công hoặc cả hai đều thất bại. In SQL databases, two or more updates can be executed in a transaction — an all-or-nothing wrapper that guarantees success or failure. If we execute two updates individually, one could succeed and the other fail — thus leaving our figures out of sync. Placing the same updates within a transaction ensures either both succeed or both fail.

Không có ràng buộc khóa nước ngoài: Hầu hết các cơ sở dữ liệu SQL cho phép bạn thực thi các quy tắc toàn vẹn dữ liệu bằng cách sử dụng các ràng buộc khóa nước ngoài. Điều này đảm bảo tất cả các hàng có khóa nước ngoài hợp lệ cho mã khớp với một mục nhập trong bảng tham gia và đảm bảo rằng bản ghi từ bảng tham gia không bị xóa nếu một hoặc nhiều hàng vẫn đề cập đến chúng. Most SQL databases allow you to enforce data integrity rules using foreign key constraints. This ensure all rows have a valid foreign key for code that matches one entry in the join table, and makes sure that a record from the join table is not removed if one or more rows still refer to them.

Lược đồ thực thi các quy tắc này để cơ sở dữ liệu tuân theo. Nó không thể cho các nhà phát triển hoặc người dùng thêm, chỉnh sửa hoặc xóa hồ sơ, có thể dẫn đến dữ liệu không hợp lệ hoặc hồ sơ mồ côi. Các tùy chọn tính toàn vẹn dữ liệu tương tự không có sẵn trong MongoDB. Bạn có thể lưu trữ những gì bạn muốn bất kể bất kỳ tài liệu nào khác. Lý tưởng nhất, một tài liệu duy nhất sẽ là nguồn duy nhất của tất cả các thông tin về một mục.

Nhu cầu về mô hình cơ sở dữ liệu

Các đối tượng là sự trừu tượng của Python cho dữ liệu. Tất cả dữ liệu trong chương trình Python được biểu thị bằng các đối tượng hoặc bằng mối quan hệ giữa các đối tượng. Mặc dù các đối tượng là một cách tốt để thể hiện dữ liệu, một vấn đề phát sinh khi chúng ta muốn làm cho dữ liệu tồn tại. Lượng dữ liệu có thể rất lớn và nó phải được lấy từ bộ nhớ liên tục một cách nhanh chóng và hiệu quả. Phần mềm cơ sở dữ liệu này phải được sử dụng để lưu trữ các đối tượng. Một phần mềm cơ sở dữ liệu có thể là một phần mềm cơ sở dữ liệu dựa trên SQL quan hệ.make the data persistent. The amount of data could be huge, and it must be retrieved from the persistent memory quickly and efficiently. This database software must be used to store the objects. A possible database software is a relational, SQL-based database software.

Một bản đồ liên quan đến đối tượng (ORM) là một thư viện mã tự động hóa việc chuyển dữ liệu được lưu trữ trong các bảng cơ sở dữ liệu quan hệ vào các đối tượng Python được sử dụng trong mã Python. ORMS cung cấp một bản tóm tắt cấp cao trên cơ sở dữ liệu quan hệ cho phép nhà phát triển viết mã Python thay vì cú pháp SQL để tạo, đọc, cập nhật và xóa dữ liệu và lược đồ trong cơ sở dữ liệu của họ. Các nhà phát triển có thể sử dụng ngôn ngữ lập trình Python mà họ cảm thấy thoải mái thay vì viết các câu lệnh SQL hoặc các thủ tục được lưu trữ.

Một ví dụ về khung ORM cho Python là SQLalchemy. SQLalchemy ORM trình bày một phương pháp liên kết các lớp Python do người dùng xác định với các bảng cơ sở dữ liệu và các trường hợp của các lớp (đối tượng) với các hàng trong các bảng tương ứng của chúng. Nó bao gồm một hệ thống đồng bộ hóa một cách minh bạch tất cả các thay đổi về trạng thái giữa các đối tượng và các hàng liên quan của chúng. Các khung web như Flask sử dụng sqlalchemy để lưu trữ dữ liệu liên tục.

Django ORM: Django đi kèm với ORM hoặc mô hình của riêng mình. Mô hình là nguồn thông tin duy nhất, dứt khoát về dữ liệu của bạn. Nó chứa các trường và hành vi thiết yếu của dữ liệu bạn lưu trữ. Nói chung, mỗi mô hình ánh xạ vào một bảng cơ sở dữ liệu duy nhất. Mô hình Django cũng có thể chuyển đổi giữa các cơ sở dữ liệu quan hệ khác nhau như Oracle SQL, MySQL hoặc MSSQL. Django comes with its own ORM or model for short.The model is the single, definitive source of information about your data. It contains the essential fields and behaviors of the data you’re storing. Generally, each model maps to a single database table. The Django Model also make it possible to switch between various relational databases such as Oracle SQL, MySQL, or MSSQL.

Sử dụng Django Orm để thêm tài liệu vào MongoDB

Hãy nói rằng bạn muốn tạo một nền tảng viết blog bằng cách sử dụng Django với MongoDB làm phụ trợ của bạn.

Trong blog của bạn

from pymongo import MongoClient
def get_db_handle(db_name, host, port, username, password):
client = MongoClient(host=host,
port=int(port),
username=username,
password=password
)
db_handle = client[db_name]
return db_handle, client

def get_collection_handle(db_handle, collection_name):
return db_handle[collection_name]

6 Tệp xác định mô hình
from pymongo import MongoClient
def get_db_handle(db_name, host, port, username, password):
client = MongoClient(host=host,
port=int(port),
username=username,
password=password
)
db_handle = client[db_name]
return db_handle, client

def get_collection_handle(db_handle, collection_name):
return db_handle[collection_name]

7:

from djongo import models
from djongo.models import forms
class BlogContent(models.Model):
comment = models.CharField(max_length=100)
author = models.CharField(max_length=100)
class Meta:
abstract = True

Để truy cập mô hình bằng Quản trị viên Django, bạn sẽ cần một định nghĩa biểu mẫu cho mô hình trên. Xác định nó như hình dưới đây:

from pymongo import MongoClient
def get_db_handle(db_name, host, port, username, password):
client = MongoClient(host=host,
port=int(port),
username=username,
password=password
)
db_handle = client[db_name]
return db_handle, client

def get_collection_handle(db_handle, collection_name):
return db_handle[collection_name]

0

Bây giờ, đã nhúng vào

from pymongo import MongoClient
def get_db_handle(db_name, host, port, username, password):
client = MongoClient(host=host,
port=int(port),
username=username,
password=password
)
db_handle = client[db_name]
return db_handle, client

def get_collection_handle(db_handle, collection_name):
return db_handle[collection_name]

1

Đó là bạn đã thiết lập! Fire Up Django Admin trên localhost: 8000/ admin/ và đây là những gì bạn nhận được:

Tiếp theo, giả sử bạn muốn mở rộng trường của tác giả để chứa nhiều thứ hơn là chỉ tên. Bạn cần cả tên và email. Đơn giản chỉ cần làm cho trường tác giả thành một trường được nhúng trên mạng thay vì một trường char char:

from pymongo import MongoClient
def get_db_handle(db_name, host, port, username, password):
client = MongoClient(host=host,
port=int(port),
username=username,
password=password
)
db_handle = client[db_name]
return db_handle, client

def get_collection_handle(db_handle, collection_name):
return db_handle[collection_name]

2

Nếu một bài đăng trên blog có nhiều nội dung từ nhiều tác giả, hãy xác định một mô hình mới:

from pymongo import MongoClient
def get_db_handle(db_name, host, port, username, password):
client = MongoClient(host=host,
port=int(port),
username=username,
password=password
)
db_handle = client[db_name]
return db_handle, client

def get_collection_handle(db_handle, collection_name):
return db_handle[collection_name]

3

Quản trị viên Django với những thay đổi mới và bạn có:

Các cách để tích hợp Django và MongoDB.

Django ORM bao gồm nhiều lớp trừu tượng được xếp chồng lên nhau.

Ngăn xếp django orm

Là một nhà phát triển web, bạn có thể tham gia thử thách kết nối Django với MongoDB theo hai cách. Hãy xem ngăn xếp khung Django ở trên để đoán các điểm nhập cảnh có thể.

Sử dụng mô hình tương thích MongoDB

Chuyển từ các mô hình Django sang ODM

Bạn hoàn toàn có thể tránh sử dụng các mô hình Django Pin bao gồm các mô hình Django trong dự án của bạn. Thay vào đó, hãy sử dụng khung bên thứ ba như Mongoengine hoặc Ming trong các dự án Django của bạn.

Chọn một mô hình khác có nghĩa là bạn bỏ lỡ:

  • Hơn 1500 người đóng góp cốt lõi cho dự án
  • Sửa chữa hàng giờ và giải quyết vé

Bạn đã tăng cường về chuyên môn của các mô hình Django hiện có và tăng cường trên khung mô hình mới. Nhưng có lẽ nhược điểm lớn nhất là dự án của bạn có thể sử dụng bất kỳ mô hình đóng góp nào của Django! Quên về việc sử dụng quản trị viên, phiên, người dùng, auth và các mô -đun đóng góp khác cho dự án của bạn.

Một số nhược điểm này được bù đắp bằng cách đưa ra một nhánh mới của Django. Django-Nonrel là một chi nhánh độc lập của Django, bổ sung hỗ trợ cơ sở dữ liệu NoQuery cho Django. Django-Nonrel cho phép viết các ứng dụng Django di động. Tuy nhiên, giao diện quản trị không hoạt động đầy đủ. Không có sự phát triển tích cực diễn ra trong dự án Django-Nonrel.

Động cơ Django MongoDB là một phụ trợ MongoDB khác cho Django là một cái nĩa ngoài ODM Mongoengine.

Django SQL đến MongoDB Transpiler - Djongo

Djongo - Bộ chuyển đổi SQL sang MongoDB

Một cách tiếp cận khác là dịch cú pháp truy vấn Django SQL được tạo ra bởi Django Orm thành các lệnh pymongo. Djongo là một trong những trình biên dịch truy vấn SQL cho MongoDB như vậy. Nó dịch mọi chuỗi truy vấn SQL thành tài liệu truy vấn MongoDB. Do đó, tất cả các mô hình Django và các mô -đun liên quan hoạt động như hiện tại. Với cách tiếp cận này, bạn đạt được:

  • Tái sử dụng các mô hình Django: Django là một khung ổn định với sự phát triển và cải tiến liên tục. Django ORM khá rộng rãi và giàu tính năng. Xác định ORM của bên thứ ba để làm việc với MongoDB có nghĩa là tái tạo toàn bộ Django ORM một lần nữa. ORM mới cần liên tục phù hợp với Django ORM. Một số tính năng Django sẽ không bao giờ đưa nó vào ORM của bên thứ ba. Ý tưởng với Djongo là sử dụng lại các tính năng Django ORM hiện tại bằng cách cuối cùng dịch các truy vấn SQL sang cú pháp MongoDB.Django is a stable framework with continuous development and enhancements. The Django ORM is quite extensive and feature-rich. Defining a third party ORM to work with MongoDB means reproducing the entire Django ORM again. The new ORM needs to constantly align with the Django ORM. Several Django features will never make it into the third party ORM. The idea with Djongo is to reuse existing Django ORM features by finally translating SQL queries to MongoDB syntax.
  • Cú pháp SQL sẽ không bao giờ thay đổi bất kể bổ sung trong tương lai cho Django. Bằng cách sử dụng Djongo, dự án của bạn hiện là bằng chứng trong tương lai! regardless of future additions to Django. By using Djongo, your project is now future proof!

Làm cho Django hoạt động với MongoDB

Lược đồ mô phỏng trong MongoDB: Mặc dù không có hỗ trợ lược đồ trong MongoDB, điều này có thể được mô phỏng. Djongo cung cấp hỗ trợ lược đồ cần thiết trong Django bằng cách sử dụng và xác định kết hợp các quy tắc xác thực MongoDB và bằng cách tạo bộ sưu tập

pip install mongoengine
1. Bộ sưu tập
pip install mongoengine
1 lưu trữ thông tin cho các tính năng hỗ trợ như khóa AutoinCrement SQL.
While there is no schema support in MongoDB, this can be emulated. Djongo provides the schema support required in Django by using and defining a combination of MongoDB validator rules and by creating a
pip install mongoengine
1 collection. The
pip install mongoengine
1 collection stores information for supporting features like the SQL AUTOINCREMENT key.

Tham gia hỗ trợ trong MongoDB: Trong phiên bản 3.2, MongoDB đã giới thiệu toán tử

pip install mongoengine
3. Nó thực hiện một tham gia bên ngoài bên trái vào một bộ sưu tập trong cùng một cơ sở dữ liệu để lọc trong các tài liệu từ bộ sưu tập đã tham gia vào bộ sưu tập để xử lý. Giai đoạn
pip install mongoengine
3 thực hiện một sự bình đẳng phù hợp giữa một trường từ các tài liệu đầu vào với một trường từ các tài liệu của bộ sưu tập đã tham gia.
In version 3.2, MongoDB introduced the
pip install mongoengine
3 operator. It performs a left outer join to a collection in the same database to filter in documents from the “joined” collection for processing. The
pip install mongoengine
3 stage does an equality match between a field from the input documents with a field from the documents of the “joined” collection.

Đối với mỗi tài liệu đầu vào, giai đoạn

pip install mongoengine
3 sẽ thêm một trường mảng mới có các phần tử là các tài liệu phù hợp từ bộ sưu tập của tham gia. Giai đoạn
pip install mongoengine
3 chuyển các tài liệu được định hình lại này cho giai đoạn tiếp theo.

Djongo sử dụng toán tử tổng hợp

pip install mongoengine
3 để thực hiện tất cả các truy vấn tham gia liên quan đến Django. Đây là cách nó làm cho quản trị viên và các mô -đun đóng góp khác hoạt động như vậy.

Hỗ trợ giao dịch trong MongoDB: Mặc dù có sức mạnh của các hoạt động nguyên tử đơn lẻ, có những trường hợp yêu cầu giao dịch đa tài liệu. Khi thực hiện một giao dịch bao gồm các hoạt động tuần tự, một số vấn đề nhất định phát sinh, trong đó nếu một hoạt động không thành công, hoạt động trước đó trong giao dịch phải rollback rollback đối với trạng thái trước đó - đó là tất cả hoặc không có gì.Despite the power of single-document atomic operations, there are cases that require multi-document transactions. When executing a transaction composed of sequential operations, certain issues arise, wherein if one operation fails, the previous operation within the transaction must “rollback” to the previous state — that is, the “all or nothing.”

Đối với các tình huống yêu cầu các giao dịch đa tài liệu, Djongo thực hiện mô hình cam kết hai pha để cung cấp hỗ trợ cho các loại cập nhật đa tài liệu này. Sử dụng cam kết hai pha đảm bảo rằng dữ liệu là nhất quán và trong trường hợp có lỗi, trạng thái trước giao dịch có thể phục hồi.

Djongo đi kèm với tập hợp các thỏa hiệp của riêng mình. Vậy những bất lợi của việc chọn sử dụng Djongo cho dự án Django của bạn là gì?

Hiệu suất: Django ORM thực hiện việc nâng cao các thao tác đối tượng phức tạp sang các chuỗi truy vấn SQL tiêu chuẩn. Nếu cơ sở dữ liệu phụ trợ của bạn dựa trên SQL, bạn có thể chuyển chuỗi truy vấn này trực tiếp đến nó mà hầu như không xử lý hậu kỳ. Tuy nhiên, với Djongo, chuỗi truy vấn bây giờ sẽ phải được chuyển đổi thành tài liệu truy vấn MongoDB. The Django ORM does the heavy lifting of converting complex object manipulations to standard SQL query strings. If your backend database was SQL-based, you could pass this query string directly to it with almost no post-processing. With Djongo, however, the query string will now have to be converted into a MongoDB query document.

Điều này sẽ yêu cầu một số chu kỳ CPU. Nhưng nếu các chu kỳ CPU thêm thực sự là một vấn đề như vậy, có lẽ bạn không nên sử dụng Python ngay từ đầu.

Sự kết luận

Tôi đã đưa bạn qua một số cách tích hợp Django với MongoDB. Bạn sẽ tìm thấy vô số văn học trực tuyến mô tả Mongoengine và các biến thể khác để làm điều này.

Tôi tập trung vào Djongo, một đầu nối mới giúp điều này có thể theo một cách khác. Nó rất dễ sử dụng và làm cho quá trình di chuyển từ phụ trợ SQL sang MongoDB rất đơn giản, bằng cách thêm một dòng mã.by adding just one line of code.