2011-01-23 69 views
1

子元素这是相当有how to query child objects in mongodb如何查询有关MongoDB

looklike我有:

派斯(国家)与其子(总UFD上(27)),我使一个Ruby seed.rb文件从文件中大量插入。

映射文件是:

class Pais 
    include Mongoid::Document 
    field :nome, :type => String 
    field :sigla, :type => String 

    embeds_many :ufds 
    validates_uniqueness_of :sigla 
end 

class Ufd 
    include Mongoid::Document 
    field :codigo_ibge, :type => String 
    field :sigla, :type => String 
    field :nome, :type => String 

    embedded_in :pais, :inverse_of => :ufds 
    embeds_many :cidades 

    validates_uniqueness_of :codigo_ibge, :sigla 
end 

class Cidade 
    include Mongoid::Document 
    field :codigo_ibge, :type => String 
    field :nome, :type => String 

    embedded_in :ufd, :inverse_of => :cidades 
    validates_uniqueness_of :codigo_ibge 
end 

所以在导入时,我身边其他的事情如下:

pais_base = Pais.create!(:nome => "Brasil", :sigla => "BR") 

File.open(caminho + 'estados.txt').each_with_index do |linha, index| 
    sigla, nome, ibge = linha.chomp.split("|") 
    pais_base.ufds << Ufd.new(:sigla => sigla, :nome => nome, :codigo_ibge => ibge) 
end 

其正确创建PAIS及UFD上孩子,但现在创建UFDS的孩子,我加载另一个文件并尝试找到一个带有id(codigo_ibge)的UFDS,但始终返回空值

File.open(caminho + 'cidades.txt').each_with_index do |linha, index| 
    ufd, ibge, nome = linha.chomp.split("|") 
    uf = pais_base.ufds.find(:first, :conditions => {:codigo_ibge => ufd.to_s }) <<<<< NIL 
    uf.cidades << Cidade.new(:codigo_ibge => ibge.to_s, :nome => nome) 
end 

我该怎么做?我已经用完了想法:/

在此先感谢。

回答

1

你使用的是什么版本的mongoid?

我认为最好的方法就是使用其中

这将使您的查询

uf = pais_base.ufds.where(:codigo_ibge => ufd.to_s }.first 

找到的是只有真正使用时,您所查询的ID。

+0

谢谢,不知道。你有更多的阅读链接吗? – 2011-02-03 12:33:27