获得至少一个关联对象的记录

我在mongoid中有以下架构:

用户有很多任务 – has_many:tasks

任务属于user – belongs_to:user

如何只有10个第一个用户至少有一个任务?

像这样的东西:

User.where(:tasks.ne => [] ).limit(10) 

你的问题是Mongoid的has_many不会在父文档中留下任何内容,所以在父文档上没有任何查询可以对你做任何有用的事情。 但是, Taskbelongs_to :user会将:user_id字段添加到tasks集合中。 这让你有可怕的事情:

 user_ids = Task.all.distinct(:user_id) users = User.where(:id => user_ids).limit(10) 

当然,如果你有embeds_many :tasks而不是has_many :tasks那么你可以根据需要查询users集合中的:tasks 。 OTOH,这可能会打破其他事情。

如果你需要将任务分开(即没有嵌入),那么你可以在User设置一个计数器来跟踪任务的数量,然后你可以这样说:

 User.where(:num_tasks.gt => 0).limit(10) 

你可以做

 User.where(:tasks.exists => true).limit(10) 

更新:

在做的时候为我工作:

 u = User.new t = u.tasks.build t.save u.save u = User.new u.save User.where(:tasks.exists => true).limit(10).count => 1