mongomapper协会跳过重复

时间:2014-07-17 22:40:13

标签: ruby-on-rails ruby mongodb mongodb-query mongomapper

我有一个包含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才能关联。为什么?

1 个答案:

答案 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集合中包含重复的文档, 认真。 ; - )

希望这有助于您理解。