[英]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#find
或Array#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.