Круто, добро пожаловать в MongoDB! Это сложно понять и зависит от вашего приложения, но я постараюсь дать вам несколько советов, основанных на том, что вы написали, и что, я думаю, будет работать лучше.
Это не всегда так, но общая теория гласит, что если объектом всегда манипулируют и рассматривают в контексте другого, вы должны встроить его в этот объект. Это вероятно случай с комментариями и постами в вашем приложении. Поэтому вы можете встраивать комментарии в посты.
Однако, поскольку вы используете объект тега в нескольких контекстах, я бы сделал его собственной коллекцией, подобной этой:
class Tag
include Mongoid::Document
field :tag, type: String
field :type, type: String
field :count, type: Integer
end
Давайте отбросим ваши требования и создадим модели.
Теги должны иметь имя, тип и счетчик того, сколько раз оно использовалось.
Выполнено с помощью вышеуказанного кода для класса тегов.
Пользователи, сообщения и комментарии должны иметь несколько тегов.
Хорошо, давайте дадим каждому из этих классов поле «теги», содержащее массив идентификаторов тегов, это будет ссылочное отношение.
class User
include Mongoid::Document
field :first_name, type: String
field :last_name, type: String
field :email, type: String
field :tags, type: Array
end
Также здесь мы будем вставлять комментарии внутри постов вместе с массивом идентификаторов тегов, как мы делаем для пользователей.
class Post
include Mongoid::Document
field :subject, type: String
field :body, type: String
field :tags, type: Array
embeds_many :comments
end
class Comment
include Mongoid::Document
field :name, type: String
field :type, type: String
field :count, type: Integer
embedded_in :post
end
Имеет смысл? Здесь есть дополнительная информация здесь о моделировании такого рода отношений в Rails, но с использованием mongomapper вместо mongoid (поэтому не обращайте внимания на синтаксис, но обратите внимание на представленные идеи)