Mongomapper查询多对多关联对象的特定字段

时间:2013-04-03 12:39:51

标签: ruby mongodb associations mongomapper

我有一个像这样的mongomapper模型:

class ChildTemplate

  include MongoMapper::Document
  plugin MongoMapper::Plugins::IdentityMap

  key :name,            String, :required => true, :unique => true
  key :description,     String
  key :config,          Array

  key :used_parameters, Array
  many :parameters, :in => :used_parameters

  validate :parameters_in_config

  def parameters_in_config
    found_parameters = Set.new

    config.each do |line|
      params = line.scan("<([-+*]{2})(.+)\1>")
      unless params.empty?
        found_parameters |= params.transpose[1]
      end
    end

    unless found_parameters == Parameter.find(used_parameters).fields(:name).to_set 
      errors.add(:parameters, 'Incorrect')
    end
  end

end

class Parameter

  include MongoMapper::Document
  plugin MongoMapper::Plugins::IdentityMap

  key :name,          String
  key :description,   String
  #more keys

end

问题在于这一行:

unless found_parameters == Parameter.find(used_parameters).fields(:name).to_set 

在这里,我构建了一个名为Set的{​​{1}},其中包含所用参数的名称。为了验证,我需要确保此集合等于found_parametersname数组中的parameter的{​​{1}}。

它没有按照我尝试的方式工作,我尝试过的其他方法包括:

ids

等...

我无法弄清楚正确的查询。此外,我总是无法找到适合mongomapper的文档。网站上的所有内容都非常简短,只有很少的例子,特别是对于ruby和mongo的整体菜单来说,这是非常困难的。

所以,如果有人可以解释更多关于查询相关文档的信息,我会很感激。

1 个答案:

答案 0 :(得分:0)

我目前正在使用每个循环来获取名称并将它们存储在一个单独的集合中:

parameters.each do |par|
    used_param_names << par.name
end

这样可以正常工作,但我想要一种更优雅的方式,因为MongoMapper可能会在一个语句中获取名称集合。