使用MongoMapper,如何找到另一个表中不存在ID的记录?

时间:2012-02-08 19:33:51

标签: mongodb 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 个答案:

答案 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)