2012-02-08 18 views
2

我有兩個模型,用戶和類。在MySQL中,我能找到用戶一類的東西,如:使用MongoMapper,我怎樣才能找到ID不存在於另一個表中的記錄?

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

我怎樣才能做到與MongoMapper類似的東西?我已經能夠在蒙戈控制檯:

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

但我找不出使用MongoMapper的語法。

回答

1

蒙戈片斷你貼是兩個查詢。該MongoMapper相當於是:

classy_users_ids = MyClass.collection.distinct(:user_id) 
+0

我喜歡.distinct代碼,我不知道這事 - 謝謝。 – jbnunn 2012-02-17 20:01:42

0

如果它們是:

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

如果你有很多用戶,如果您有以下跳過轉換MongoMapper::Document的第一個查詢可能會更有效相關喜歡Class ... has_many :users可以對user_ids直接匹配:

Class.where(:user_ids.ne => user.id) 
相關問題