С MongoMapper, как я могу найти записи, где идентификатор не существует в другой таблице?
У меня есть две модели, User и Class. В 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 ответа:
Фрагмент Mongo, который вы опубликовали, - это два запроса. Эквивалент Монгомапера:
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)