我在 mongoid 中有以下架构:
用户有许多任务 - has_many:tasks
任务属于用户 - belongs_to:user
如何只有10名第一批至少有一项任务的用户?
这样的事情:
User.where(:tasks.ne => [] ).limit(10)
答案 0 :(得分:2)
你的问题是,Mongoid的has_many
不会在父文档中留下任何内容,因此父文档上没有任何查询可以对你做任何有用的事情。但是,belongs_to :user
中的Task
会在:user_id
集合中添加tasks
字段。这让你有可怕的事情:
user_ids = Task.all.distinct(:user_id)
users = User.where(:id => user_ids).limit(10)
当然,如果您有embeds_many :tasks
而不是has_many :tasks
,那么您可以根据需要查询:tasks
集合中的users
。 OTOH,这可能会打破其他事情。
如果您需要将任务分开(即未嵌入),那么您可以在User
中设置一个计数器以跟踪任务数量,然后您可以这样说:
User.where(:num_tasks.gt => 0).limit(10)
答案 1 :(得分:0)
你可以做到
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