2012-02-08 3 views
2

私は2つのモデルUserとClassを持っています。MongoMapperでは、IDが別のテーブルに存在しないレコードをどのように見つけることができますか?

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

私はMongoMapperと似たような方法を行うことができます:MySQLでは、私のようなものを持つクラス内のユーザないを見つけることができますか?私はMongoコンソールで次のようにできる:

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

しかし、私はMongoMapperを使って構文を理解することができません。

答えて

1

投稿したMongoスニペットは2つのクエリです。 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

を私は.distinctコードが好き、私はそれについて知らなかった - ありがとうございました。 – jbnunn

0

、彼らがしている場合Class ... has_many :usersのような関連あなたはuser_idsに対して直接一致させることができます:

Class.where(:user_ids.ne => user.id) 
関連する問題