Mongoid n'a pas has_many :through ou une fonctionnalité équivalente. Ce ne serait pas aussi utile avec MongoDB car il ne prend pas en charge les requêtes de jointure, donc même si vous pouviez référencer une collection associée via une autre, cela nécessiterait toujours plusieurs requêtes.
https://github.com/mongoid/mongoid/issues/544
Normalement, si vous avez une relation plusieurs-plusieurs dans un SGBDR, vous modélisez cela différemment dans MongoDB en utilisant un champ contenant un tableau de clés "étrangères" de chaque côté. Par exemple :
class Physician
include Mongoid::Document
has_and_belongs_to_many :patients
end
class Patient
include Mongoid::Document
has_and_belongs_to_many :physicians
end
En d'autres termes, vous élimineriez la table de jointure et cela aurait un effet similaire à has_many :through en termes d'accès à "l'autre côté". Mais dans votre cas, ce n'est probablement pas approprié car votre table de jointure est une classe de rendez-vous qui contient des informations supplémentaires, pas seulement l'association.
La façon dont vous modélisez cela dépend dans une certaine mesure des requêtes que vous devez exécuter, mais il semble que vous devrez ajouter le modèle de rendez-vous et définir des associations pour le patient et le médecin, comme ceci :
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
Avec les relations dans MongoDB, vous devez toujours faire un choix entre des documents intégrés ou associés. Dans votre modèle, je suppose que MeetingNotes est un bon candidat pour une relation intégrée.
class Appointment
include Mongoid::Document
embeds_many :meeting_notes
end
class MeetingNote
include Mongoid::Document
embedded_in :appointment
end
Cela signifie que vous pouvez récupérer toutes les notes avec un rendez-vous, alors que vous auriez besoin de plusieurs requêtes s'il s'agissait d'une association. Il faut juste garder à l'esprit la limite de taille de 16 Mo pour un seul document qui peut entrer en jeu si vous avez un très grand nombre de notes de réunion.