簡體   English   中英

mongoid - 查詢嵌入式文檔

[英]mongoid - querying embedded docs

class Foo
  include Mongoid::Document
  field :name, type: String
  embeds_many :bars
end

class Bar
  include Mongoid::Document
  field :name, type: String
  embedded_in :foo
end

有沒有辦法可以在這里查詢所有的bars 在AR我會做類似Bar.where(name: 'something') - 只要給我所有符合某些標准的條形圖。

就目前而言,我只能在一個foo上查詢特定的條形圖。 `Foo.first.bars.where(名字:'某事')。 我知道mongoDB沒有連接,所以......我很好奇如何解決這個問題。

我准備好一起失去Foo並做一些像:

class Bar
  include Mongoid::Document
  field :foo_name, type: String
  field :name, type: String
end

如果沒有先返回嵌入的Foo對象,則無法返回Bar對象。

您可以查詢頂級文檔( Foo )作為嵌入文檔的匹配項。

foo = Foo.create(:name => 'foo1')
foo.bars << Bar.new(:name => 'bar1')

Foo.where(:'bars.name' => 'bar1').first
=> #<Foo _id: 53c4a380626e6f813d000000, name: "foo1">

然后,一旦你有與某些嵌入式欄匹配的Foos,你就可以找到你正在尋找的另一個查詢欄(它只是映射到一個Array#findArray#select

foo.bars << Bar.new(:name => 'bar2')
Foo.where(:'bars.name' => 'bar1').first.bars.where(:name => 'bar2').first
=> #<Bar _id: 53c4a380626e6f813d000001, name: "bar2">

更新:如果您要查詢父文檔上下文中的嵌入式文檔,我建議不要使用嵌入式文檔。 當您嵌入文檔時,您說“我不打算將文檔存在於自己的文檔中”。 如果你發現自己直接查詢它,那么就放棄嵌入。 它很容易嵌入,但通常你不需要/需要它。

注意:我已經去嵌入了100M +條目,這是一個漫長的過程。

注意2:嵌入一些元數據或聚合是一種優化,最好在您真正需要的時候保留

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM