Запрос с фильтрованными полями для вложенных объектов

#ruby-on-rails #mongodb #mongoid #mongomapper

#ruby-on-rails #mongodb #mongoid #mongomapper

Вопрос:

допустим, у меня есть документ

 book: {name: "book", 
   "chapters":[{title: "Chapter I", 
   "sections":[{},{}]
   }, {...}
]}
  

Я хочу получить объект book с главами встроенных объектов, но каждая глава не должна содержать вложенных «разделов» (но должна содержать другие атрибуты, такие как title):

 book: {name: "Book", 
   "chapters":[{title: "Chapter I"
   }, {...}
]}
  

Как я должен выполнить запрос, используя драйвер Mongo и Mongoid (или Mongomapper)?

Я пробовал это с mongoid:

 books.all[0].chapters.only(:title)[0].sections # it still works, though I expect sections to be nil
  

Ответ №1:

ваш запрос

  books.all[0].chapters.only(:title)[0].sections 
  

выбирает книги со всеми их документами, встроенными в главы, в книгах.все, поэтому нет смысла использовать ‘только’ после глав. Ваш запрос может сработать, если главы представлены как отдельные документы и вместо них установлена связь has_many embeds_many

Таким образом, вы должны использовать ‘only’, подобный этому, в документе books

  books.only('chapters.title').all[0].chapters.sections 
  

Комментарии:

1. Пожалуйста, прекратите подписывать все свои ответы! Боже, сколько всего!

2. Каждый из ваших 443 ответов заканчивается «Приветствиями» в отдельной строке

3. Это просто не обязательно, и они, как правило, редактируются (хотя 443 для меня многовато >.<)

4. это все равно, что сказать спасибо.. вот и все, чувак. повсюду тысячи постов с благодарностями и приветствиями .. : ( в любом случае, теперь я перестану подписывать frm..

5. (Я знаю, что это значит) Да, и я удаляю их, где это возможно! Благодарность подразумевается; вы пишете ответ, а не письмо. 🙂