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