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

Làm thế nào để triển khai has_many:thông qua các mối quan hệ với Mongoid và mongodb?

Mongoid không có has_many:through hoặc một tính năng tương đương. Nó sẽ không quá hữu ích với MongoDB vì nó không hỗ trợ các truy vấn nối, vì vậy ngay cả khi bạn có thể tham chiếu một bộ sưu tập có liên quan qua một bộ sưu tập khác, nó vẫn sẽ yêu cầu nhiều truy vấn.

https://github.com/mongoid/mongoid/issues/544

Thông thường, nếu bạn có mối quan hệ nhiều-nhiều trong RDBMS, bạn sẽ lập mô hình khác nhau trong MongoDB bằng cách sử dụng trường chứa một mảng các khóa 'ngoại' ở hai bên. Ví dụ:

class Physician
  include Mongoid::Document
  has_and_belongs_to_many :patients
end

class Patient
  include Mongoid::Document
  has_and_belongs_to_many :physicians
end

Nói cách khác, bạn sẽ loại bỏ bảng tham gia và nó sẽ có tác dụng tương tự với has_many:thông qua việc truy cập vào 'phía bên kia'. Nhưng trong trường hợp của bạn, điều đó có thể không phù hợp vì bảng tham gia của bạn là một lớp Cuộc hẹn mang một số thông tin bổ sung, không chỉ liên kết.

Cách bạn lập mô hình điều này ở một mức độ nào đó tùy thuộc vào các truy vấn mà bạn cần chạy nhưng có vẻ như bạn sẽ cần thêm mô hình Cuộc hẹn và xác định các liên kết với Bệnh nhân và Bác sĩ như sau:

class Physician
  include Mongoid::Document
  has_many :appointments
end

class Appointment
  include Mongoid::Document
  belongs_to :physician
  belongs_to :patient
end

class Patient
  include Mongoid::Document
  has_many :appointments
end

Với các mối quan hệ trong MongoDB, bạn luôn phải lựa chọn giữa các tài liệu được nhúng hoặc liên kết. Trong mô hình của bạn, tôi đoán rằng MeetingNotes là một ứng cử viên sáng giá cho một mối quan hệ được nhúng.

class Appointment
  include Mongoid::Document
  embeds_many :meeting_notes
end

class MeetingNote
  include Mongoid::Document
  embedded_in :appointment
end

Điều này có nghĩa là bạn có thể truy xuất các ghi chú cùng với một cuộc hẹn, trong khi bạn sẽ cần nhiều truy vấn nếu đây là một liên kết. Bạn chỉ cần lưu ý giới hạn kích thước 16 MB cho một tài liệu duy nhất có thể có hiệu lực nếu bạn có một số lượng rất lớn ghi chú cuộc họp.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cơ sở dữ liệu hướng tài liệu có được dùng để thay thế cơ sở dữ liệu quan hệ không?

  2. MongoDB Opensource và MongoDB Enterprise

  3. Bật nén dữ liệu trong MongoDB 3.0

  4. Cách tốt nhất để lưu trữ MongoDB trên DigitalOcean

  5. Cách truy vấn MongoDB với like