Запрос коллекции Mongodb на основе атрибута родителя - PullRequest
0 голосов
/ 27 ноября 2011

У меня есть документ Posts, принадлежащий Пользователям, и у пользователей есть атрибут :approved.Как я могу запрашивать свои сообщения, используя Mongodb-st? Я получаю только те сообщения, для которых у пользователя :approved => true?

Я мог бы написать цикл, который создает новый массив, но это кажется неэффективным.

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

MongoDB не имеет никакого понятия о соединениях.

Вы указали в комментариях, что Posts и Users - это отдельные коллекции, но ваш запрос явно включает данные из обеих коллекций, что подразумеваетобъединение.

Я мог бы написать цикл, который создает новый массив, но это кажется неэффективным.

Операция объединения в SQL в основном представляет собой цикл, который происходит всервер.Без поддержки объединения на стороне сервера вам придется создавать свои собственные.

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

0 голосов
/ 28 ноября 2011

Самый простой способ подумать об этом - это запросить уникальные идентификаторы пользователей одобренных пользователей, а затем запросить публикации документов, в которых указан user_id автора этого набора.

Как сказал Рубиш, вы могли быотмените нормализацию, добавив утвержденное поле в документ публикации.Когда статус подтверждения пользователя переключается (он становится утвержденным или не утвержденным), обновите коллекцию сообщений, где для всех сообщений этого пользователя вы переключаете поле денормализованного утверждения.

Использование денормализованного метода позволяет вам сделатьодин запрос вместо двух (упрощение логики для наиболее распространенного случая), и не слишком сложно поддерживать.

Дайте мне знать, если это имеет смысл.

...