Я испытываю затруднения при схватывании, как отфильтровать встроенные документы в MongoDB и начинаю думать, что я должен использовать реляционную ассоциацию, но это чувствует себя неправильным в контексте хранилища документа.
Придерживаясь типичной системы блога/комментария, у меня есть набор blogs
, и каждый blog
имеет многих comments
. Комментарии хранятся как встроенные документы в документе блога.
Очень просто отфильтровать мой blogs
набор, но для фильтрации моего comments
встроенный в каждого blog
, Я должен загрузить их всех в память (получите все в массив Ruby), и цикл через каждый комментарий, возвращая, которые соответствуют определенным критериям.
Мои усилия отфильтровать встроенные документы с помощью записи через точку перестали работать и возвращают все sub документы.
Существует ли лучший способ заставить MongoDB фильтровать их для меня, или я должен подчиниться реляционным ассоциациям? (Оттягивающий все встроенные документы и вручную фильтрацию будет слишком интенсивным в конечном счете),
В настоящее время нет способа фильтрации На встроенных документах в том, как вы описываете. Использование точки DOT позволяет совпадать на встроенном документе, но весь документ, родитель и все, все еще будут возвращены. Также возможно выбрать, какие поля будут возвращены, но это тоже не помогает вашему делу.
У нас есть случай «виртуальных коллекций», который будет реализовать желаемую функциональность; Не стесняйтесь голосовать на нем:
http://jira.mongodb.org/browse/server-142
Между тем, вы, вероятно, должны лечить комментарии как их собственную коллекцию. В целом, если вам нужно работать с заданным набором данных, сделайте его коллекцией. Если он лучше задуматься как часть другого набора, лучше встроить.