获得至少一个关联对象的记录
我在mongoid中有以下架构:
用户有很多任务 – has_many:tasks
任务属于user – belongs_to:user
如何只有10个第一个用户至少有一个任务?
像这样的东西:
User.where(:tasks.ne => [] ).limit(10)
你的问题是Mongoid的has_many
不会在父文档中留下任何内容,所以在父文档上没有任何查询可以对你做任何有用的事情。 但是, Task
的belongs_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