Подтвердить что ты не робот

Фильтрация встроенных документов в MongoDB

У меня возникли проблемы с тем, как фильтровать встроенные документы в MongoDB, и я начинаю думать, что я должен использовать реляционную ассоциацию, но это неправильно в контексте хранилища документов.

Придерживаясь типичной системы blog/comment, у меня есть коллекция blogs, и у каждого blog есть много comments. Комментарии хранятся в виде встроенных документов внутри документа блога.

Очень просто отфильтровать мою коллекцию blogs, но чтобы отфильтровать мой comments встроенный в каждый blog, мне приходится загружать их все в память (извлекать все в массив Ruby) и перебирайте каждый комментарий, возвращая те, которые соответствуют конкретным критериям.

Мои усилия по фильтрации встроенных документов с использованием точечной нотации не выполняются и возвращают все вспомогательные документы.

Есть ли лучший способ заставить MongoDB отфильтровать их для меня, или я должен смириться с реляционными ассоциациями? (Отмена всех встроенных документов и фильтрация вручную будет слишком интенсивной в долгосрочной перспективе)

4b9b3361

Ответ 1

В настоящее время нет возможности фильтровать встроенные документы в том виде, в котором вы описываете. Использование точечной нотации позволяет вам сопоставлять встроенный документ, но весь документ, родительский и все, все равно будет возвращен. Также возможно выбрать, какие поля будут возвращены, но это также не поможет вашему делу.

У нас есть случай "виртуальных коллекций", который будет реализовывать желаемую функциональность; не стесняйтесь проголосовать за него:

http://jira.mongodb.org/browse/SERVER-142

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