当我查询嵌入式模型时,尽管存在大量包含嵌入式模型实例的父记录,但没有记录被返回。Mongoid嵌入式文档返回空查询
有两种模式,嵌入Band
一个Label
:
class Band
include Mongoid::Document
embeds_one :label
end
class Label
include Mongoid::Document
field :name, type: String
embedded_in :band
end
我可以查询乐队(Band.all
,Band.find
等)就好了,但是当我查询标签,它没有返回。例如:
创建与嵌入式标签带,并将其保存:
> b = Band.create
=> #<Band _id: 516cff525543d8842e000008, _type: nil>
> b.build_label name: "new label"
=> #<Label _id: 516cff5a5543d8842e000009, _type: nil, name: "new label">
> b.save
=> true
然后我查询了带模型,所有的罚款:
> Band.all.to_a
=> [#<Band _id: 516cff525543d8842e000008, _type: nil>]
> Band.count
=> 1
> Band.first.label
=> #<Label _id: 516cff5a5543d8842e000009, _type: nil, name: "new label">
> Band.find "516cff525543d8842e000008"
=> #<Band _id: 516cff525543d8842e000008, _type: nil>
但是,当我查询标签模型,什么也没有显示!
> Label.all.to_a
=> []
> Label.count
=> 0
> Label.last
=> nil
> Label.first
=> nil
> Label.find "516cff5a5543d8842e000009" # this is the label id from Band
=> nil
我几乎肯定这不是预期的行为。代码直接来自Mongoid文档的示例:http://mongoid.org/en/mongoid/docs/relations.html#embeds_one
我错过了什么?
感谢您的明确解释。我没有特定的用例,我只是注意到它,并认为这是一种奇怪的行为 - 当你对嵌入式Mongoid模型进行查询时,Mongoid是否不应该至少发出警告? –
@SherwinYu,你是对的,因为它是不直观的,即使它是可以理解的。不幸的是,这是Mongoid的许多(不常见)角落的情况,所以要小心:) –