我有一个包含ObjectId数组的文档:
Class Task
key :user_id, Array
many :userlist, class_name: 'User', :in => :user_id
在该数组中,我存储了不同的user_id值,有时会重复。我可以看到重复的user_id使用:
@task.user_id.each do |z|
puts z
end
但是当我使用以下方式获取并关联数据时
@task.userlist.each do |z|
puts z.name
end
我没有得到重复项:(,只有唯一的ID才能关联。为什么?
答案 0 :(得分:1)
从协会的定义来看,你所看到的是完全正确的 以及与“in”子句匹配的基础查询。 刷新你认为“in”为 distinct 对象的“集合”http://en.wikipedia.org/wiki/Set_(mathematics) 用户列表的获取在User集合上有一个基础查询,带有$ in子句, 见http://docs.mongodb.org/manual/reference/operator/query/in/
对于@ task.userlist关联,您将只获得User集合中与$ in子句匹配的文档, 用户集合是主要的“主题”。
存在显着的语义差异User.where(:user_id.in => self.user_id)
与
self.user_id.collect |user_id| do User.where(:user_id => user_id).first; end
为了从前一个查询中获取“重复”,您必须在User集合中包含重复的文档, 认真。 ; - )
希望这有助于您理解。