Đây là một câu hỏi cũ nhưng tình cờ gặp nó, tôi không nghĩ rằng câu trả lời được chấp nhận trả lời câu hỏi. Câu hỏi không phải là "MongoEngine là gì?" - đó là "Tại sao tôi nên sử dụng MongoEngine?" Và những lợi thế của một cách tiếp cận như vậy. Điều này vượt xa Django đến Python / Mongo nói chung. Hai xu của tôi:
Trong khi cả PyMongo và MongoEngine đều trả về các đối tượng (điều này không sai), PyMongo trả về các từ điển cần có khóa của chúng được tham chiếu bằng chuỗi. MongoEngine cho phép bạn xác định một lược đồ thông qua các lớp cho dữ liệu tài liệu của bạn. Sau đó, nó sẽ ánh xạ các tài liệu vào các lớp đó cho bạn và cho phép bạn thao tác chúng. Tại sao phải xác định lược đồ cho dữ liệu ít giản đồ? Bởi vì theo ý kiến của tôi, nó rõ ràng, rõ ràng và dễ lập trình hơn nhiều. Bạn không phải kết thúc với các từ điển rải rác về mã của bạn, nơi bạn không thể biết những gì trong đó mà không thực sự xem dữ liệu hoặc chạy chương trình. Trong trường hợp của MongoEngine và một IDE tốt như PyCharm, gõ một dấu "." sau khi đối tượng sẽ cho bạn biết tất cả những gì bạn cần biết thông qua tính năng tự động hoàn thành. Việc kiểm tra và tìm hiểu mô hình dữ liệu khi chúng hoạt động cũng dễ dàng hơn nhiều đối với các nhà phát triển khác và sẽ làm cho bất kỳ ai chưa xem mã trong một thời gian làm việc hiệu quả hơn, nhanh chóng hơn.
Ngoài ra, đối với tôi, cú pháp được sử dụng để thao tác tài liệu với PyMongo (về cơ bản giống như bảng điều khiển mongo) là xấu, dễ xảy ra lỗi và khó bảo trì.
Đây là một ví dụ cơ bản về việc cập nhật một tài liệu trong MongoEngine, đối với tôi, nó rất hữu ích:
BlogPost.objects(id=post.id).update(title='Example Post')
Tại sao sử dụng PyMongo? MongoEngine là một lớp giữa bạn và kim loại trần, vì vậy nó có thể chậm hơn, mặc dù tôi không có bất kỳ điểm chuẩn nào. PyMongo cấp thấp hơn, vì vậy đương nhiên bạn có nhiều quyền kiểm soát hơn. Đối với các dự án đơn giản, MongoEngine có thể không cần thiết. Nếu bạn đã thông thạo cú pháp Mongo, bạn có thể thấy PyMongo trực quan hơn nhiều so với tôi và không gặp vấn đề gì khi viết các truy vấn và cập nhật phức tạp. Có lẽ bạn thích làm việc trực tiếp với các từ điển ở cấp độ thấp hơn và không quan tâm đến một lớp trừu tượng bổ sung. Có thể bạn đang viết một kịch bản không phải là một phần của một hệ thống lớn và bạn cần nó phải gọn gàng và nhanh nhất có thể.
Còn nhiều điều để tranh luận, nhưng tôi nghĩ điều đó khá tốt cho những điều cơ bản.