mongomapper协会跳过重复
我有一个带有ObjectId数组的Document:
Class Task key :user_id, Array many :userlist, class_name: 'User', :in => :user_id
在该Array中,我存储了不同的user_id值,有时会重复。 我可以看到重复的user_id使用:
@task.user_id.each do |z| puts z end
但是当我使用以下方法获取和关联数据时:
@task.userlist.each do |z| puts z.name end
我没有得到重复项:(,只有唯一的ID才能获得关联。为什么?
从关联的定义和与“in”子句匹配的基础查询,您所看到的是完全正确的。 刷新你认为“in”作为不同对象的“集合” http://en.wikipedia.org/wiki/Set_(mathematics)用户列表的获取在User集合上有一个基础查询,带有$ in子句,见http://docs.mongodb.org/manual/reference/operator/query/in/
对于@ task.userlist关联,您将只获取User集合中与$ in子句匹配的文档,User集合是主要的“主题”。 与…有显着的语义差异
User.where(:user_id.in => self.user_id)
与
self.user_id.collect |user_id| do User.where(:user_id => user_id).first; end
为了从前一个查询中获取“重复”,您必须认真对待User集合中的重复文档。 😉
希望这有助于您的理解。
- 运行时更改模型与mongodb / mongoid
- 如何获取Mongoid文档的所有字段名称?
- 需要设计艺术家推荐的建议
- Rails 4 / Devise / MongoDB:使用自定义属性和强参数的“未允许的参数”
- 表情符号在mongodb中没有正确保存
- Mongo :: Error :: OperationFailure:E11000重复键错误集合:metalab_development.demands index:sn_1 dup key:{:null}(11000)
- 如何从Mongoid中的嵌入文档中排除字段?
- mongodb:将对象ID转换为BSON :: ObjectId
- 如何规范化Mongo中的输入 – Ruby