С MongoMapper, как я могу найти записи, где идентификатор не существует в другой таблице? - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть две модели, Пользователь и Класс.В MySQL я мог найти пользователей , а не в классе с чем-то вроде:

SELECT * FROM Users WHERE id NOT IN (SELECT user_id FROM Classes)

Как я могу сделать что-то подобное с MongoMapper?Мне удалось в консоли Mongo:

db.users.find({user_id:{$ne:db.classes.find({}, {user_id:1})}});

, но я не могу понять синтаксис с помощью MongoMapper.

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Отправленный вами фрагмент кода Mongo состоит из двух запросов.Эквивалент MongoMapper:

classy_users_ids = MyClass.fields(:user_id).find_each.map(&:user_id).uniq
classless_users  = User.where(:id.nin => classy_users_ids)

Если у вас много пользователей, первый запрос может быть более эффективным, если вы пропустите преобразование в MongoMapper::Document со следующим:

classy_users_ids = MyClass.collection.distinct(:user_id)
0 голосов
/ 17 сентября 2015

Если они связаны как Class ... has_many :users, вы можете напрямую сопоставить user_ids:

Class.where(:user_ids.ne => user.id)
...