通过以下方式在Mongo Mapper中存储有关文档的其他信息:in =>排列

时间:2010-02-12 15:54:31

标签: mongodb mongomapper

泵和零件之间有很多关系。我将Part ID存储在Pump文档中。我还想存储特定泵中使用的零件数量。

这就是我所拥有的,简而言之

class Pump
  include MongoMapper::Document

  key :number, String
  key :desc, String
  key :part_ids, Array

  many :parts, :in => :part_ids 
end

class Part
  include MongoMapper::Document

  attr_accessor :pump_ids

  key :qty, Integer
  key :number, String
  key :desc, String

  def pumps
    Pump.all(:part_ids => self.id)
  end
end

在我意识到每个泵使用的零件数量不同之前哪个工作正常,所以现在我需要存储关系的数量,以及其他一些关系特定信息,如笔记。

而不仅仅是存储和数组的ID我不喜欢这样的东西。

[{:pump_id => "12hj3hjkbrw", :qty = 4},
 {:pump_id => "ggtyh5ehjrw", :qty = 10, :notes => "when using this part with this Pump please note this"}]

我不确定如何使这项工作。

1 个答案:

答案 0 :(得分:0)

看起来你真的想要第三个模型,比如PartUsage或封装关系的东西。关键是你试图存储和使用关于关系本身的一些数据,这需要另一个模型(EmbeddedDocument是理想的)。

你可以这样做(小心:未经测试!):

class Pump
  include MongoMapper::Document

  key :number, String
  key :desc, String
  key :part_usage_ids, Array

  many :part_usages
end

class Part
  include MongoMapper::Document

  key :qty, Integer
  key :number, String
  key :desc, String

  def pumps
    # not 100% sure of this query actually
    PartUsage.all(:part_id => self.id).collect { |pu| pu.pump }
  end
end

class PartUsage
  include MongoMapper::EmbeddedDocument

  belongs_to :pump
  belongs_to :part
  key :pump_id, ObjectId
  key :part_id, ObjectId
  key :qty, Integer
  key :notes, String
end