Получить данные из двух коллекций mongoid - PullRequest
0 голосов
/ 10 декабря 2011

Привет всем поклонникам MongoDB / Mongoid!

У меня небольшая проблема с дизайном моей схемы.

На данный момент у меня есть три модели: User, Post иComment.User <- has_many -> Posts, Post <- belongs_to -> User, Post <- has_many -> Comments и Comment <- belongs_to -> Post, User.

Теперь мне нужно перечислить фид со всеми сообщениями и комментариями, включая объект User.Подумайте о времени в Twitter, включая комментарии.В комментарии должны быть загружены как связанный пост, так и пользователь поста и пользовательский объект комментария.

Возможно ли это с помощью Mongo и Mongoid или мне нужно изменить дизайн схемы?Если да, то есть идеи?

Спасибо, Тобиас

1 Ответ

0 голосов
/ 10 декабря 2011

Вот что я бы сделал, чтобы правильно масштабировать вашу схему; наряду с обеспечением довольно простой структуры документа. Я бы взял и содержал один пост в документе, который содержит всю необходимую вам информацию, и делал бы что-то вроде:

Таблица сообщений:

{
   _id: mongoId,
   author_name:'Tobias',
   author_id: mongoId,
   post_content: 'hi this is my post',
   comments:[
       {
            "comment":"this is a comment",
            "user":"bob",
            "user_id":mongoId
       }, 

       {
            "comment":"this is a comment2",
            "user":"bob2",
            "user_id":mongoId
       }
   ]
  }

Затем просто создайте таблицу пользователей, в которой хранится идентификатор / имя и любая другая информация, которая может потребоваться пользователю. Причина, по которой я выбрал денормализацию author_name / user, заключается в простоте представления этих данных в вашем слое представления. Гораздо проще написать быструю функцию уменьшения карты для просмотра и обновления имен в таблице сообщений (внутренняя работа), а затем выполнять несколько запросов для получения информации. Наличие этой богатой встроенной схемы поможет вам быстро создавать страницы.

Точно так же я понимаю, что author_name == user и author_id == user_id (просто другая схема именования, чтобы уточнить, где она находится в основном для кода вашего приложения. Но это всего лишь пример, и вы можете изменить его по своему усмотрению. .

Удачи!

...