Понимание многих взаимосвязей MongoMappers

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

event:

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

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


РЕДАКТИРОВАТЬ: Я обнаружил, что то, что я искал здесь, в моем первом вопросе, - это использовать MongoMapper: : EmbeddedDocument вместо включения MongoMapper :: Document


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

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

class Event
   many :users
end

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

event.users << someAttendingUser

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

Итак, резюмируя эту бессвязную речь:

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

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

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


РЕДАКТИРОВАТЬ 2:

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

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

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

11
задан Owen 10 April 2011 в 19:45
поделиться