Насколько глубоко я должен встраиваться с Mongoid? - PullRequest
2 голосов
/ 14 декабря 2011

Привет, я новичок в mongoDB и Mongoid, и меня немного смущает вопрос, когда использовать встроенные документы и насколько глубоко встраивать.

Итак, вымышленный пример:

Library collection has_many :books, which embeds_many :pages, which embeds_many :sections

Поскольку я не могу работать с разделом, скажем, напрямую, я должен пройти через books.pages.sections, верно?

Это приведет к этому маршруту, libraries/:id/books/:id/pages/:id/sections/:id Что кажется немного сумасшедшим, лучшая практика будет заключаться в том, чтобы вкладывать только один уровень, верно? Одним из способов было бы указать маршрут pages/:id/sections/:id, а затем вставить запрос в запрос?

Будет ли сложнее запрашивать, скажем, разделы? Например, если мне нужно найти все книги, где в разделах есть тег x?

Однако, если я не буду встраивать полностью, у меня будет дополнительный запрос?

Может кто-нибудь пролить свет? Благодаря.

1 Ответ

6 голосов
/ 14 декабря 2011

Прежде всего, я считаю, что никто не может дать вам правильный ответ о том, как глубоко вы должны встраивать документы.Это сильно зависит от ваших конкретных требований проекта.В общем, вы должны ответить на несколько вопросов, чтобы выбрать подходящий дизайн схемы:

  1. Будут ли пользователи одновременно обновлять один и тот же объект в коллекции?(или что скажет мой начальник, если клиенты потеряют свои обновления)
  2. Нужна ли мне поддержка атомарных операций?
  3. Нужно ли мне независимо показывать вложенные коллекции или они запрашиваются у родительского элемента?
  4. Нужно ли сортировать внедренные объекты?
  5. Нужно ли запрашивать встроенные объекты?

Если вы ответите 1,2-верно;3 Мне нужно показать их самостоятельно (разные страницы);4,5 - правда, тогда я уверен, что встраивание будет какой-то болью в твою задницу.

Дополнительные запросы не должны быть проблемой, я думаю.

...