我有两个型号,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的语法。
答案 0 :(得分:1)
您发布的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)
答案 1 :(得分:0)
如果它们与Class ... has_many :users
相关,则可以直接与user_ids
匹配:
Class.where(:user_ids.ne => user.id)