Ruby on rails Mongoid:为符合选项的对象中嵌入的_返回不同的值

Ruby on rails Mongoid:为符合选项的对象中嵌入的_返回不同的值,ruby-on-rails,ruby,mongodb,mongoid,Ruby On Rails,Ruby,Mongodb,Mongoid,我有两节课 class Claim include Mongoid::Document embeds_many :claim_fields belongs_to :user ... end class ClaimField include Mongoid::Document embedded_in :claim field :title field :value ... end 我需要通过db(不是Ruby,它对于数千条记录来说太慢了)获取索赔_字段的所有

我有两节课

class Claim
  include Mongoid::Document
  embeds_many :claim_fields
  belongs_to :user
  ...
end

class ClaimField
  include Mongoid::Document
  embedded_in :claim
  field :title
  field :value
  ...
end
我需要通过db(不是Ruby,它对于数千条记录来说太慢了)获取索赔_字段的所有唯一值以及索赔的当前标题

我已经试过了

user = User.find(...)
Claim.collection.distinct("claim_fields.value", {:user_id => user.id, "claim_fields.title" => some_title})
# that is the same as user.claims.find(...).distinct("claim_fields.value")
但它会返回所有claim_字段的值,我需要它只返回我需要的标题为claim_字段的值


PS看起来这里需要一些MapReduce

这里的基本问题是MongoDB查询只返回整个文档。您正在筛选
claim_字段。title
,但系统将返回所有匹配的
claim
文档

您正在执行一个不同的,但MongoDB对待子对象和文档的方式不同。因此,
distinct
可能没有按您的要求执行

这里有两种可能的解决方案:

  • 通过M/R进行预计算(如您所建议)
  • 将它们分成两个集合

  • 关于#2,没有嵌入对象的要求。应根据您计划执行的查询执行嵌入。因此,如果这是一个常见的查询,那么创建这些单独的文档是公平的。

    问题是,起初不需要通过嵌入式对象进行查询,但现在我们需要它