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

MongoEngine:EmbeddedDocument v / s. Trường tham chiếu

Câu trả lời cho điều này thực sự phụ thuộc vào những gì bạn định làm với dữ liệu bạn đang lưu trữ trong mongodb. Điều quan trọng cần nhớ là ReferenceField sẽ trỏ đến một tài liệu trong một bộ sưu tập khác trong mongodb, trong khi một EmbeddedDocument được lưu trữ trong cùng một tài liệu trong cùng một bộ sưu tập.

Hãy xem xét lược đồ này:

Person
    -> name
    -> address

Address
    -> street
    -> city
    -> country

Nếu bạn mong đợi mỗi người chỉ có một địa chỉ và mỗi địa chỉ chỉ được liên kết với một người (mối quan hệ một-một) và bạn thường sẽ truy vấn cơ sở dữ liệu cho một hoặc nhiều Người tài liệu thì trường Person.address phải là EmbeddedDocumentField .

Nếu bạn mong đợi mỗi người có nhiều địa chỉ nhưng mỗi địa chỉ sẽ chỉ được liên kết với một người (mối quan hệ một-nhiều) và bạn vẫn chủ yếu truy vấn một Người thì bạn có thể sử dụng EmbeddedDocumentListField .

Nếu bạn mong đợi mỗi người có nhiều hơn một địa chỉ và mỗi địa chỉ sẽ được liên kết với nhiều người (mối quan hệ nhiều-nhiều), bạn có thể nên sử dụng ReferenceField .

Tuy nhiên, ngay cả khi bạn là một-một hay một-nhiều, nếu Địa chỉ là một phần của mô hình dữ liệu mà bạn quan tâm thì việc lưu trữ nó trong bộ sưu tập của chính nó có thể là một điều thuận lợi vì nó làm cho việc tổng hợp và lập chỉ mục dễ dàng hơn.

Một điểm khác cần xem xét là trừ khi bạn biến nó tắt mongoengine sẽ hủy tham chiếu mọi ReferenceField khi bạn truy xuất một tài liệu - điều này có thể dẫn đến các hình phạt về hiệu suất với nhiều ReferenceField hoặc tham chiếu đến các tài liệu rất lớn.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mã lỗi đặt bản sao 76

  2. Scotty sử dụng MongoDB

  3. Làm cách nào để cập nhật tài liệu Mongo sau khi chèn nó?

  4. Cách tạo người dùng trong MongoDB

  5. Dự án mảng các đối tượng thành giá trị chính