Итак, во-первых, я не очень хорошо знаю, когда дело доходит до 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