Подтвердить что ты не робот

Понимание MongoMappers много отношений

Итак, во-первых, я не очень хорошо знаю, когда дело доходит до Ruby, Rails, Mongo или даже ActiveRecord, поэтому я приношу свои извинения, если эти вопросы достаточно просты. Во-первых, у меня есть модель "Событие", и я добавил много отношений к моей модели "Комментарий". Теперь мое (основное) понимание mongo (или любого документа db), что внешний поиск ключей (или то, что они называются в монго) не рекомендуется, вместо этого предпочитая хранить как можно больше в одном документе. Имея это в виду, я ожидаю, что у вас будет одна коллекция событий с комментарием JSON/BSON, встроенным в каждый документ i.e.

event:

{
 Title: "some event"
 Comments : [
    { user_id: [object id], comment: "comment"}, 
    { user_id: [object id], comment: "other comment"}
 ]
}

Вместо этого я вижу, что коллекция комментариев была создана, а также коллекция событий. Будет ли это правильным способом сопоставить эти отношения, если да, то каким образом я могу остановить создание коллекции комментариев и вместо этого включить информацию, встроенную непосредственно в событие? Я предполагаю, что я должен сказать, что мое сопоставление комментариев не имеет свойства _id и, следовательно, не принадлежит к его собственной коллекции.


EDIT: Я узнал, что то, что я искал здесь в моем первом вопросе, было использование MongoMapper:: EmbeddedDocument вместо того, чтобы включать MongoMapper:: Document


Во-вторых, я хочу, чтобы пользователи могли отмечать себя как "посещение" или просто "заинтересованное" событие, которое, как я предполагал, будет смоделировано как массив ссылки user_id на событие. Поэтому я изначально думал, что это будет отображаться как два "много" отношения, но насколько я могу сказать, имя константы, которую я передаю во многий метод, используется для создания getter/seters, что не сработает для меня если бы у меня было два отношения для одного типа.

Другими словами, если у меня есть это отображение:

class Event
   many :users
end

Тогда я понимаю, что у меня тогда будут генерации и сеттеры, созданные для свойства users. Поэтому я могу сделать что-то вроде:

event.users << someAttendingUser

Это хорошо, и на данный момент я хотел бы запросить ссылку на пользователя, а не весь пользователь BSON (, в отличие от примера комментариев выше). Теперь проблема заключается в том, как это сделать, когда у меня есть два множества сопоставлений с пользовательской коллекцией, как с моей потребностью как для "посещающих", так и "заинтересованных" пользователей?

Итак, чтобы суммировать этот беспорядок:

  • Иногда я хочу хранить многие отношения напрямую как BSON в оринальном документе, а не как ссылку на документ в другой коллекции. Как это сделать?

  • Иногда я хочу хранить многие отношения одного и того же типа в документе, и я хочу, чтобы они были ссылками на документ в другой коллекции. Как это сделать?

Надеюсь, что это имело смысл, и я прошу прощения, если я спрашиваю здесь очевидное.


ИЗМЕНИТЬ 2:

Хорошо, я действительно искал, прежде чем задавать этот вопрос, но похоже, что я нашел ответ на обе свои проблемы, поэтому сам закрою вопрос.

Вторая часть потребовала от меня указать параметр имени класса для отображения i.e.

class Event
   many :attendees, :class_name  => "User"
   many :interested, :class_name  => "User"
end

4b9b3361

Ответ 1

Хорошо, я действительно искал, прежде чем задавать этот вопрос, но похоже, что я нашел ответ на обе свои проблемы, поэтому сам закрою вопрос.

Вторая часть потребовала от меня указать параметр имени класса для отображения i.e.

class Event
   many :attendees, :class_name  => "User"
   many :interested, :class_name  => "User"
end